Express中的客户端服务器

时间:2014-12-10 15:55:16

标签: javascript node.js express

如何在客户端向javascript发送obect? 我之前问了一个问题并得到了回答并接受了这个问题,因为我无法在计算机上查看答案:  Client receive json object to javascript

我仍然不明白如何将数据发送到我尝试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");
      }
    });

谢谢!

3 个答案:

答案 0 :(得分:2)

您希望使用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' });
  }
});

希望有所帮助!

答案 1 :(得分:2)

使用res.send()

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

答案 2 :(得分:0)

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

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
}

有关如何处理接收数据的更多信息,请查看express.js Request docs。 正如@rdegges所指出的,如果您要发送json数据,则应使用res.json代替res.end。但是,在您的情况下,由于您是从客户端提出请求并且No 'Access-Control-Allow-Origin'(您在评论中说过),您有两种选择:

  • 按照here
  • 中的说明设置服务器响应的标头
  • 让您的服务器代码返回jsonp响应,而不仅仅是json,例如res.jsonp({ message: 'you sent content' });

如果您选择第二个选项,则应准备好客户端代码以处理此问题,并添加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'
});