如何在 Nodejs 中呈现多个 sql 查询和数据
How to render multiple sql query and data in Nodejs
我在将多个数据查询呈现给 page.I 时遇到问题已经做了很多研究,但出现错误,例如无法查找查看我的代码如下:
app.get('/xem', function(req,res){
pool.query("SELECT * FROM phim WHERE slider = '1' ORDER BY id DESC Limit 9", function (error, result, client){
if (!!error){
console.log('Error query');
} else {
res.render('xem', {slider:result});
}
});
pool.query("SELECT * FROM phim WHERE new = '1'", function (error, result, client){
if (!!error){
console.log('Error query');
} else {
res.render('xem', {new:result});
}
});
});
当 运行 它代码我给出错误:
82| <!-- END HEAD -->
83| <h1> ok </h1>
>> 84| <%= new %>
85|
new is not defined
如何解决?
您编写的代码对于这两个查询都不正确。
您将始终获得第一个查询结果作为响应
在第一个查询结果中,您发送 slider
作为键并期望 name
作为响应
res.render('xem', {slider:result});
改成
res.render('xem', {new:result});
由于您给出的 name
密钥在第二个查询结果中,在您的情况下无法访问该密钥
您的方法有两个问题:
res.render()
结束http请求,多次调用会失败
- 你正在执行两个异步函数,你没有注意执行顺序
试试这个:
var async = require('async');
app.get('/xem', function(req,res){
var final = {};
async.series({
slider: function(cb) {
pool.query("SELECT * FROM phim WHERE slider = '1' ORDER BY id DESC Limit 9", function (error, result, client){
cb(error, result);
})
},
new: function(cb){
pool.query("SELECT * FROM phim WHERE new = '1'", function (error, result, client){
cb(error, result)
})
}
}, function(error, results) {
if (!error) {
res.render('xem', results);
}
});
});
我不知道你的 pool
是否使用了 promises,以防万一此代码使用异步方法
谢谢大家。我成功了,示例代码:
app.get('/xem', function(req,res){
pool.query("SELECT * FROM phim WHERE slider = '1' ORDER BY id DESC Limit 9", function (error, result, client){
var result1 = result;
link('https://drive.google.com/file/d/0BxG6kVC7OXgrQ1V6bDVsVmJMZFU/view?usp=sharing', function(data){
var dataxem = data;
pool.query("SELECT * FROM user", function (error, result, client){
var user = result;
res.render('xem', {slider:result1, link:data, user:user});
});
});
});
})
app.use('/', (req,res) => {
connection.query('select * from users', function(err, rows, fields){
if(err) return;
console.log(rows[0]);
res.send(rows);
});
});
我在将多个数据查询呈现给 page.I 时遇到问题已经做了很多研究,但出现错误,例如无法查找查看我的代码如下:
app.get('/xem', function(req,res){
pool.query("SELECT * FROM phim WHERE slider = '1' ORDER BY id DESC Limit 9", function (error, result, client){
if (!!error){
console.log('Error query');
} else {
res.render('xem', {slider:result});
}
});
pool.query("SELECT * FROM phim WHERE new = '1'", function (error, result, client){
if (!!error){
console.log('Error query');
} else {
res.render('xem', {new:result});
}
});
});
当 运行 它代码我给出错误:
82| <!-- END HEAD -->
83| <h1> ok </h1>
>> 84| <%= new %>
85|
new is not defined
如何解决?
您编写的代码对于这两个查询都不正确。
您将始终获得第一个查询结果作为响应
在第一个查询结果中,您发送 slider
作为键并期望 name
作为响应
res.render('xem', {slider:result});
改成
res.render('xem', {new:result});
由于您给出的 name
密钥在第二个查询结果中,在您的情况下无法访问该密钥
您的方法有两个问题:
res.render()
结束http请求,多次调用会失败- 你正在执行两个异步函数,你没有注意执行顺序
试试这个:
var async = require('async');
app.get('/xem', function(req,res){
var final = {};
async.series({
slider: function(cb) {
pool.query("SELECT * FROM phim WHERE slider = '1' ORDER BY id DESC Limit 9", function (error, result, client){
cb(error, result);
})
},
new: function(cb){
pool.query("SELECT * FROM phim WHERE new = '1'", function (error, result, client){
cb(error, result)
})
}
}, function(error, results) {
if (!error) {
res.render('xem', results);
}
});
});
我不知道你的 pool
是否使用了 promises,以防万一此代码使用异步方法
谢谢大家。我成功了,示例代码:
app.get('/xem', function(req,res){
pool.query("SELECT * FROM phim WHERE slider = '1' ORDER BY id DESC Limit 9", function (error, result, client){
var result1 = result;
link('https://drive.google.com/file/d/0BxG6kVC7OXgrQ1V6bDVsVmJMZFU/view?usp=sharing', function(data){
var dataxem = data;
pool.query("SELECT * FROM user", function (error, result, client){
var user = result;
res.render('xem', {slider:result1, link:data, user:user});
});
});
});
})
app.use('/', (req,res) => {
connection.query('select * from users', function(err, rows, fields){
if(err) return;
console.log(rows[0]);
res.send(rows);
});
});