Express中的客户端服务器

我怎么能发送一个obect到客户端的JavaScript? 我问早些时候的一个问题,被回答,接受了这个问题,因为我不能检查计算机上的答案: 客户端接收json对象的JavaScript

我仍然不知道如何将数据发送到客户端我试图req.send /渲染,它并没有得到在客户端的function。

客户:

$.get('127.0.0.1:3000', {mydata: 'content'}, function(response){ //callback triggered when server responds console.log(JSON.stringify(response)); }); 

服务器:

  app.get('/', function (req, res) { if(req.params.mydata === 'content'){ res.end("you sent content"); } else { res.end("you sent something else"); } }); 

谢谢!

而不是使用res.end ,你想使用res.json – 这将适当地设置HTTP Content-Type头,所以你的数据实际上是作为JSON传递的。 以下是一个示例路由:

 app.get('/', function(req, res) { if (req.params.mydata === 'content') { res.json({ message: 'you sent content' }); } else { res.json({ message: 'you sent something else' }); } }); 

希望有所帮助!

使用res.send()

 app.get('/', function (req, res) { req.params.mydata === 'content' ? res.send("you sent content") : res.send("you sent something else"); }); 

在你的服务器代码中,当你这样做时:

 req.params.mydata 

,你正试图从你的路线之一映射的属性获取mydata ,如:

 'http://127.0.0.1:1337/:mydata' 

这不是你的情况。 你通过查询string发送一个对象{mydata: 'content'} ,如:

 'http://127.0.0.1:1337/?mydata=content' 

因此,要获得这些数据在你的服务器代码上,你必须这样做:

 if (req.query.mydata === 'content') { // do something } 

甚至

 if (req.param('mydata) === 'content') { // do something } 

有关如何处理收到的数据的更多信息,请查看express.js请求文档 。 正如@rdegges指出的,如果你想发送json数据,你应该使用res.json而不是res.end 。 但是,就你而言,既然你正在从你的客户端请求,并且No 'Access-Control-Allow-Origin' (你在评论中说过),你有两种select:

  • 设置您的服务器响应的标题, 这里解释,或;
  • 让你的服务器代码返回一个jsonp响应,而不仅仅是json ,例如res.jsonp({ message: 'you sent content' });

如果你采取第二种select,你应该准备你的客户端代码来处理这个,添加dataType: 'jsonp'

 $.ajax({ url: 'http://127.0.0.1:1337/', data: { mydata: "content" }, dataType: 'jsonp', success: function (json) { console.log(json); }, error: function (jqXHR, error, errorThrown) { console.log(error); }, type: 'GET' });