2015-08-30 3 views
1

Я, вероятно, с видом на самое простое решение, но я пробовал все, что мог найти или найти в Интернете.JavaScript добавить свойство к объекту

Я пытаюсь добавить свойство к моему объекту JSON, который мне нужен в моем представлении. Но независимо от того, что я пытаюсь добавить свойство, оно не отображается в моем объекте. Я проверил, что переменная doc является фактическим объектом.

Отсутствие ошибок в консоли. Console.log() показывает содержимое объекта doc и ничего больше.

Кто-нибудь знает, что происходит?

Blog.findOne({'slug': req.params.slug}, function(err, doc) { 

    if (!err){ 

    if(_.isEmpty(doc)) { res.status(404).json({ response: "Nothing found here." }); } else { 

     var blogPost = doc; 
     blogPost.someProperty = 'test'; 
     console.log(blogPost); // doesn't contain new property 

     res.status(200).json({ response: blogPost }); 

    } 

    } else { throw err; } 

}); 

Выход BlogPost/док

{ 
    "response": { 
    "_id": "55e31854823389ec1f5506fc", 
    "title": "A sample post.", 
    "slug": "a-sample-post2", 
    "body": "Hello world. This is a sample post. \n\nThis should be a new paragraph.", 
    "__v": 0, 
    "date": "2015-08-30T14:51:00.836Z" 
    } 
} 

Простой тест, как в браузере работает. Поэтому я действительно запутался, почему он не работает в моем приложении NodeJS. Что-то делать с callbacks/async или что-то еще?

var test = {}; 
test.prop = "test"; 
console.log(test); 
Object {prop: "test"} 
+0

Любые ошибки в консоли? содержит ли он какие-либо свойства? – Amit

+0

@ Не допускайте ошибок консоли и да, она содержит то, что содержит исходный «doc», но не более того. –

+1

Интересно, установлен ли внутренний атрибут [[Extensible]] объекта false? –

ответ

1

Вы должны использовать lean функцию, если вы хотите, чтобы получить результат как object.

Вы даже можете немного переформатировать код, чтобы избавиться от уровня отступа.

Blog.findOne({'slug': req.params.slug}).lean().exec(function(err, doc) { 

    if (err){ 
     throw err; 
    } 

    if(_.isEmpty(doc)) { 
     res.status(404).json({ response: "Nothing found here." }); 
     return; 
    } 

    // else is not required 
    var blogPost = doc; 
    blogPost.someProperty = 'test'; 

    res.status(200).json({ response: blogPost }); 
}); 
+0

спасибо за оптимизацию кода! должен думать больше в следующий раз! –

+1

Я всегда стараюсь избегать гнездования как можно больше. Делает его более читаемым;) – Subash

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