2016-12-28 83 views
0

建立一个简单的服务器,的NodeJS:发送JSON对象

var express = require('express'); 
var app = express(); 
var rooms = {}; 
.... 
app.listen(port, function(){console.log('Server Starts...\n');}); 

在通用处理器的代码,我可以送一个JSON文件是这样的:

app.post('/test',function(req,res){ 
    ..... 
    json = { 'status' = true, 'id' = new_id }; 
    res.end(JSON.stringify(json)); 
}); 

或者只是这样的:

app.post('/test',function(req,res){ 
    ..... 
    json = { 'status' = true, 'id' = new_id }; 
    res.json(json); 
}); 

stringify正在将其转换为字符串(这很明显),但是当它使用这个或那个时候更好? 有没有更好的方法发送json对象与快递?

在这两种情况下,我该如何处理对象的接收?

我尝试下面的代码:

newid: function(){ 
     var new_id; 
     $.post('/test',new_id); 
     return new_id; 
    } 

但在我的HTML文件中的JavaScript是无法看到它(未定义):

<script>    
      var test = function() { 
       json = newid(); 
       alert(json); 
      } 
.... 
<button onclick="test()">NewId</button><br> 
.... 
+0

推荐阅读:[没有像“JSON对象”](http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/)。 '{'status'= true,'id'= new_id}'也不是一个“JSON文件”,也不是一个文件,也不是JSON(它甚至不是JavaScript,这是一个语法错误)。你必须明确你的术语,因为如果你把它混淆成一团糟,你很难推断你的任务。 – Tomalak

+0

使用http://expressjs.com/en/api.html#res.json – str

回答

0

我找到了解决方案,使其与工作从服务器端描述的第二个选项:

... 
json = { 'status' = true, 'id' = new_id }; 
res.json(json); 

ofcourse,new_id是我的一个变量代码。 在客户端做的改变,我送返回值的函数instad:

newid: function(){ 
     $.post('/test', function(data){ 
      if(data.status) console.log(data.new_id) 
     }) 
    }, 
0

与要传递到快递以.json功能什么留在你原来的问题的意见是一个对象,所以你的代码应该更像:

app.post('/test',function(req,res){ 
    ..... 
    let responseObject = { 'status' = true, 'id' = new_id }; 
    res.json(responseObject); 
}); 

这将返回JSON一样的,如果你字符串化它,但使用以.json也将所有正确的标题。

您无法从服务器端代码中看到任何回应的原因是客户端您正试图同时使用$ .post应该发送回调的位置。您还需要更改代码,因为$ .post函数期望您发送回调作为第二个参数。

来源:https://api.jquery.com/jquery.post/

newid: function(callback){ 
     $.post('/test', callback, 'json'); 
    } 

然后,你需要通过

<script>    
      var test = function() { 
       json = newid(function(object) { 
        alert(object); 
       } 
      } 
.... 
<button onclick="test()">NewId</button><br> 
.... 

希望这有助于通过回调函数。