2016-12-28 3 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; 
    } 

Но Javascript в моем HTML файл не может увидеть его (не определено):

<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/ru/api.html#res.json – str

ответ

0

Я нашел решение для создания его работы с второй вариант, описанный со стороны сервера:

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

, новинка - переменная в моей код. Изменения были сделаны на стороне клиента, я посылаю функцию возврата вместо внесения значения:

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> 
.... 

Надеется, что это помогает.

Смежные вопросы