Javascript Express中的客户端服务器

Javascript Express中的客户端服务器,javascript,node.js,express,Javascript,Node.js,Express,如何在客户端向javascript发送obect? 我之前问了一个问题,得到了回答并接受了这个问题,因为我无法在电脑上查看答案: 我仍然不知道如何将数据发送到我尝试req.send/render的客户端,但它在客户端无法正常工作 客户: $.get('127.0.0.1:3000', {mydata: 'content'}, function(response){ //callback triggered when server responds console.log(JSON.

如何在客户端向javascript发送obect? 我之前问了一个问题,得到了回答并接受了这个问题,因为我无法在电脑上查看答案:

我仍然不知道如何将数据发送到我尝试req.send/render的客户端,但它在客户端无法正常工作

客户:

$.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内容类型头,以便您的数据实际上作为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.end,而是想使用res.json-这将适当地设置HTTP内容类型头,以便您的数据实际上作为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' });
  }
});

希望有帮助

在服务器代码中,执行以下操作时:

req.params.mydata
,您正在尝试从映射到其中一个路由的属性获取mydata,如:

'http://127.0.0.1:1337/:mydata'
这不是你的情况。您正在通过查询字符串发送对象{mydata:'content'},如:

'http://127.0.0.1:1337/?mydata=content'
因此,要在服务器代码中获取这些数据,您必须执行以下操作:

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

if (req.param('mydata) === 'content') {
  // do something
}
有关如何处理接收到的数据的更多信息,请参阅。 正如@rdegges指出的,如果要发送json数据,应该使用res.json而不是res.end。但是,在您的情况下,由于您是从客户端发出请求,并且没有“访问控制允许来源”,您在评论中说了这一点,因此您有两个选择:

如前所述,设置服务器响应的标题,或; 让服务器代码返回jsonp响应,而不仅仅是json响应,例如res.jsonp{message:'yousentedcontent'}; 如果选择第二个选项,则应准备客户端代码来处理此问题,添加数据类型:“jsonp”:


在服务器代码中,执行以下操作时:

req.params.mydata
,您正在尝试从映射到其中一个路由的属性获取mydata,如:

'http://127.0.0.1:1337/:mydata'
这不是你的情况。您正在通过查询字符串发送对象{mydata:'content'},如:

'http://127.0.0.1:1337/?mydata=content'
因此,要在服务器代码中获取这些数据,您必须执行以下操作:

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

if (req.param('mydata) === 'content') {
  // do something
}
有关如何处理接收到的数据的更多信息,请参阅。 正如@rdegges指出的,如果要发送json数据,应该使用res.json而不是res.end。但是,在您的情况下,由于您是从客户端发出请求,并且没有“访问控制允许来源”,您在评论中说了这一点,因此您有两个选择:

如前所述,设置服务器响应的标题,或; 让服务器代码返回jsonp响应,而不仅仅是json响应,例如res.jsonp{message:'yousentedcontent'}; 如果选择第二个选项,则应准备客户端代码来处理此问题,添加数据类型:“jsonp”:

使用

使用


好啊启动应用程序后,如果您向localhost:3000或127.0.0.1:3000发出浏览器请求,您是否会收到响应,就像您发送了其他内容一样?是的。你可以简单地说,我的问题是如何让它写得“你发送的内容”漂亮。因此,您已经完成了将数据发送到服务器中的客户机部分的操作。现在,您必须调试客户端。您在浏览器控制台中看到什么了吗?如果您在ajax请求的回调中只放了一个console.log“test”,您能看到它被记录了吗?但是即使我删除上面显示的客户端部分,它也显示您发送了其他东西。我不确定我是否理解你。我打开浏览器,在控制台中写下:console.log'test'并得到:2 test unfinedno problem。当我告诉您将console.log'test'放在回调中时,我的意思是将它放在客户端代码中,比如:$.get'127.0.0.1:3000',{mydata:'content'},functionresponse{//callback在服务器响应console.log'test';};时触发;。只是看看您的客户端代码是否真的在执行回调。启动应用程序后,如果您向localhost:3000或127.0.0.1:3000发出浏览器请求,您是否会收到响应,就像您发送了其他内容一样?是的。你可以简单地说,我的问题是如何让它写得“你发送的内容”漂亮。因此,您已经完成了将数据发送到服务器中的客户机部分的操作。现在,您必须调试客户端。您在浏览器控制台中看到什么了吗?如果您在ajax请求的回调中只放了一个console.log“test”,您能看到它被记录了吗?但是即使我删除上面显示的客户端部分,它也显示您发送了其他东西。我不确定我是否理解你。我打开浏览器,在控制台中写下:console.log'test'并得到:2 test unfinedno problem。当我告诉您将console.log'test'放在回调中时,我的意思是将它放在客户端代码中,比如:$.get'127.0.0.1:3000',{mydata:'content'},functionresponse{//callback在服务器响应console.log'test';};时触发;。看看你的客户端代码是否真的在执行回调。谢谢你的回答。但是我问如何使用这段代码发送客户机数据,而不必使用json,任何数据,在这种情况下,您可以使用res.send
-但问题是,这在您的示例中不起作用,因为您的jQuery代码专门寻找JSON内容——这就是为什么我说使用res.JSON。如果您想发送非JSON数据,请继续执行您正在执行的操作,但请修改jQuery代码以查找字符串而不是JSON。谢谢您的回答。但是我问如何使用这段代码发送客户机数据,不必依赖json,任何数据啊,在这种情况下,您可以使用res.send-但问题是,这在您的示例中不起作用,因为您的jQuery代码专门寻找json内容-这就是为什么我说使用res.json。如果您想发送非JSON数据,请继续执行您正在执行的操作,但请修改jQuery代码以查找字符串而不是JSON。首先,非常感谢您的帮助!我尝试这样做,但得到了错误:发送后无法设置标题。我想这是因为我在这行前面有res.render'main,这个页面保存了客户端的javascriptYes,这是正确的。如果您在res.end或res.send之前调用res.render,您会得到一个错误,因为响应已经发送。那么我如何发送main,它包含侦听json数据的javascript,并根据您在问题中所说的从服务器发送数据,我知道您已经在浏览器中加载了客户端,希望向服务器端发出请求并检索数据。在app.get“/”中,我希望发送要显示的页面以及数据。刚刚尝试了res.render'main',data,但它没有首先工作,真的非常感谢您的帮助!我尝试这样做,但得到了错误:发送后无法设置标题。我想这是因为我在这行前面有res.render'main,这个页面保存了客户端的javascriptYes,这是正确的。如果您在res.end或res.send之前调用res.render,您会得到一个错误,因为响应已经发送。那么我如何发送main,它包含侦听json数据的javascript,并根据您在问题中所说的从服务器发送数据,我知道您已经在浏览器中加载了客户端,希望向服务器端发出请求并检索数据。在app.get“/”中,我希望发送要显示的页面以及数据。只是尝试了res.render'main',data,但它不起作用