我想使用Expres.js
和knex.js
两个表进行渲染,只使用一个get函数,以便在一个HTML模板中使用两个表中的数据。当我只查询一个表(学校或学生)但我不知道如何处理两个表时,它可以工作。
有什么建议吗?
app.get('/schools', function(req, res) {
knex.select()
.from('schools', 'students')
.then(function(schools, students) {
res.render('schools', {
schools: schools,
students: students
});
}).catch(function(error) {
console.log(error);
});
});
答案 0 :(得分:5)
您需要使用join
根据某些reference key
使用多个表格
以下是使用引用键
example
表1:用户和表2:帐户
参考密钥为user's primary key
.then(function() {
return knex('users')
.join('accounts', 'users.id', 'accounts.user_id')
.select('users.user_name as user', 'accounts.account_name as account');
})
希望这可以给你更好的想法。
有关详细信息,请参阅Docs
答案 1 :(得分:3)
你的方法确实有效,但是为了避免使用promise hell,我建议你这个习惯用法(请参阅链接以获得更好的例子。)
router.get("/schools",function(req,res){
var schools
knex("schools").select().then(function(ret){
schools=ret
return knex("students").select()
}).then(function(students){
res.render("schools",{
students: students,
schools: schools
})
})
})
答案 2 :(得分:1)
我找到了问题的解决方案并且它正在工作,只是将新查询添加到前一个的.then并将其作为参数传递,这样我就可以将两个表都渲染为相同的.html并独立使用它们
knex.select()
.from('schools')
.then(function(schools){
knex.select()
.from('students')
.then(function(students) {
res.render('schools', {
students: students,
schools: schools
});
});
}).catch(function(error) {
console.log(error);
});