我试图从我的网页中呈现的数据库中返回数据,但是无法这样做。我使用ejs作为我的模板引擎,书架(orm)并表达为我的节点框架。
我的模型看起来像这样:
'use strict';
var bookshelf = require('../bookshelf');
var Contact = bookshelf.Model.extend({
tableName: 'contacts',
});
module.exports = Contact;
我的控制器看起来像这样:
function list(req, res, next) {
new Contact().fetchAll()
.then(function(contacts) {
var contacts = contacts.toJSON();
var contacts = JSON.stringify(contacts);
console.log(contacts)
res.render('contacts', {
contacts: contacts
});
}).catch(function(error) {
console.log(error);
res.send('An error occured');
})
}
我的模板看起来像这样:
<% include partials/header %>
<h1><%= test %></h1>
<ul>
<% contacts.forEach(function(contacts){ %>
<li><%= contacts.firstName%></li>
<% }) %>
</ul>
<% include partials/footer %>
我希望发生的是,每个联系人都会在页面上显示他们的名字。但是,即使console.log语句(在控制器中)在控制台中显示此内容,也不会显示任何内容:
[{"id":1,"firstName":"tom","lastName":"jones","emailAddress":"joney@test.com"},{"id":2,"firstName":"don","lastName":"jon","emailAddress":"don@test.com"}]
因此数据从数据库返回,而不是在我的视图中呈现。有人可以帮助我解决我做错的事吗?
方法2:
以下是我尝试过的新方法。然而,这只会导致JSON显示在我的网页上。
function list(req, res) {
Contact.fetchAll()
.then(contacts => res.json({
contacts
})
).catch(function(error){
console.log(error);
res.send('An error occured');
})
}
答案 0 :(得分:0)
似乎bookhelf orm会返回一个collection对象,您可以使用.toArray()
方法将其转换为数组,然后将其传递给您的视图,而无需调用JSON.stringify
,试试这个:
function list(req, res, next) {
new Contact().fetchAll()
.then(function(contacts) {
res.render('contacts', {
contacts: contacts.toArray()
});
}).catch(function(error) {
console.log(error);
res.send('An error occured');
});
}
答案 1 :(得分:0)
您的联系人集合似乎是toJSON()
的两倍。如果您之后要打{{1}},则无需明确致电toJSON()
,因为该方法已经自行调用JSON.stringify()
。
然而,这不是问题所在。真正的问题是你正在对集合进行字符串化,这意味着它在模板上使用时是一个字符串,因此无法将其视为对象。
如果您只删除.toJSON()
部分,它应该可以正常工作。