2016-10-15 7 views
0

Response.json не показывая поля со значением undefinedResponse.json не отображаются поля со значением неопределенных

Я реализует API узла для управления данными в базе данных Монго. Запросы дают мне право JSON. Когда я отправляю этот JSON клиенту React, поля, содержащие undefined, не отображаются. Что я делаю не так? Есть ли работа?

Чтобы сузить область моей проблемы, добавьте код ниже на сервер узла. console.log напечатает правильный выход. Он будет, например, включать status: undefined, однако res.json не будет содержать ни одного узла со значением undefined.

app.get("/test", function(req, res) { 
    let test = { 
     document: "test", 
     data: { 
      products: [ 
       { 
        id: 123, 
        type: "smartphone", 
      name: "Motorola Moto G", 
        instock: true, 
        status: undefined, 
        link: null 
       }, 
       { 
        id: 456, 
        type: "notsosmartphone", 
      name: "Samsung S7", 
        instock: false, 
        status: "burning", 
        link: undefined 
       } 
      ], 
      length: 2, 
      date_created: '20161015T09:15', 
      status: undefined, 
      person: {name: "Kathy", age: 30, cute: true}, 
      arr:[123,"abc",{"a":"1"},{"b":"2"},{"c":"3"}] 
     } 
    }; 
    console.log(test); 
    res.json(test); 
}); 

ответ

3

Expressjs response.json() метод uses JS JSON.stringify() метод для преобразования объекта в строку JSON.

JSON.stringify() explicitly removes undefined values from objects всякий раз, когда он называется undefined is not a valid JSON value type.

Вы можете использовать replacer function, чтобы явно переопределить поведение undefined и установить значения null, чтобы они были возвращены в ответ.

Пример:

app.set('json replacer', function (key, value) { 
    // undefined values are set to `null` 
    if (typeof value === "undefined") { 
     return null; 
    } 
    return value; 
    } 
); 
+0

Спасибо Филиппу! Мне нужно показать json точно так же, как он хранится в базе данных, и я не влияю на то, как эти данные хранятся. Есть ли такое поведение? –

+0

, если «точно так же, как он хранится в базе данных» с «неопределенными» значениями, то это не произойдет ... как я уже сказал, 'undefined' является недопустимым типом данных JSON –

+0

Еще раз спасибо Фелипе! Мне не нравится это поведение, но теперь я хотя бы понимаю, что происходит ... ;-) Я буду использовать замену, как вы предложили в качестве лучшей альтернативы. –

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