2015-12-07 3 views
0

я работаю на мой первый проект узла с помощью экспресс и sequelize, и я не понимая, как рендеринг страницы работаетПопытка получить данные для отображения в таблице

У меня есть следующие функции в мой один из мои модели (sequelize):

getGreetings: function (req, res) { 
    Greeting.findAll({ 

    }).then(function (data) { 
     console.log('Returned data for greetings: ' + data); 
     res.send({greetings:data}); 
    }) 
} 

Вот мой маршрут:

var Greeting = require('../models/greetings'); 
router.get('/', function(req, res) { 
    res.render('index', function(){ 
     Greeting.getGreetings(req, res); 
    }); 
}); 

и мой стол EJS Я хочу, чтобы отобразить данные в:

<tbody>   
    <% for(var i=0; i < greetings.length; i++) { %> 
     <tr> 
     <td><%= greetings[i].name %></td> 
     <td><%= greetings[i].message %></td> 
     </tr> 
    <% } %> 
</tbody> 

Это не отображает какой-либо из html, а скорее отражает данные json. Может кто-нибудь объяснить, почему моя таблица html не заполняется?

ответ

1

, но скорее эхо-данные json.

Это происходит потому, что getGreetings() всегда устанавливая, что в качестве ответа, с использованием res.send():

res.send({greetings:data}); 

Чтобы обеспечить greetings вашему мнению, вы должны вместо этого обеспечить data внутри locals уделяется res.render():

res.render('index', { greetings: data }); 

Оба метода не взаимодействуют друг с другом. Каждый из них определяется как end сам ответ, поэтому вы можете использовать только один ответ.


Если пересмотреть getGreetings в return обещание, созданный .findAll():

getGreetings: function (req) { 
    return Greeting.findAll({ 
     // ... 
    }); 
} 

Затем обработчик маршрута может связываться с ним и решить, как использовать сам результат - следует ли использовать res.send() или res.render():

var Greeting = require('../models/greetings'); 
router.get('/', function(req, res) { 
    Greeting.getGreetings(req).then(function (greetings) { 
     res.render('index', { greetings: greetings }); 
    }); 
}); 
+0

Не могли бы вы добавить заметку об использовании решений маршрутизатор https://www.npmjs.com/package/c о-экспресс. Это позволило бы использовать блоки try catch и возвращать 'next (err)' в случае неудачи обещания. Благодаря! –

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