Nodejs中mysql查询出来的数据,如何在传出
Nodejs中mysql查询出来的数据,如何在传出
#add.js var mysql = require(‘mysql’); var connection = mysql.createConnection({ host : ‘localhost’, user : ‘root’, password : ‘’, database:‘test’ });
connection.connect();
connection.query(
'select * from userinfo',
function(err,res,fields){
returnDate(res);
});
connection.end();
function returnDate(res){
module.exports = res;
console.log(res);
}
#app.js
var express = require('express');
var app = express();
var add = require('./add.js');
console.log(add);
app.get('/', function(req, res){
res.render('index.jade',add);
});
app.listen(3000);
#执行结果
"C:\Program Files\nodejs\node.exe" app.js
{}
[ { id: 1, name: 1 } ]
请问大大们,我如何在app.js里面获取 add.js里面 查询出来的 数据?
为了在 app.js
中获取 add.js
文件中查询出来的数据,我们需要确保在 add.js
中的数据能够正确地传递给 app.js
。当前的实现存在一些问题,因为 returnDate(res)
函数只是简单地将数据赋值给 module.exports
,但这种方式在异步操作中并不适用。
以下是改进后的实现方法:
#add.js
首先,我们将 returnDate
函数修改为一个接受回调函数的异步函数,以便在查询完成后返回数据。
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'test'
});
connection.connect();
function queryData(callback) {
connection.query('SELECT * FROM userinfo', function (err, res, fields) {
if (err) throw err;
callback(null, res); // 返回查询结果
});
connection.end(); // 结束连接
}
module.exports = queryData;
#app.js
接下来,在 app.js
中引入 add.js
并调用 queryData
函数以获取数据,并将其传递给视图。
var express = require('express');
var app = express();
var queryData = require('./add.js');
app.get('/', function (req, res) {
queryData(function (err, data) {
if (err) {
console.error(err);
res.status(500).send('Internal Server Error');
return;
}
res.render('index.jade', { users: data }); // 将数据传递给视图
});
});
app.listen(3000, function () {
console.log('App is listening on port 3000!');
});
解释
-
add.js
:queryData
函数是一个异步函数,它使用回调函数来处理查询结果。- 当查询成功时,调用回调函数并传入查询结果。
- 连接在查询结束后被关闭。
-
app.js
:- 引入
add.js
中的queryData
函数。 - 在路由处理程序中调用
queryData
函数,并通过回调函数接收查询结果。 - 使用
res.render
方法将查询结果传递给视图模板。
- 引入
这样,你就可以在 app.js
中获取到 add.js
中查询出来的数据,并将其传递给视图进行渲染。
谢谢 已经解决了。
为了在 app.js
中获取 add.js
里查询出来的数据,你需要调整你的代码结构。主要问题在于你试图在 add.js
文件中直接导出数据,这可能会导致数据还没有准备好就被导出了。
下面是一个改进的方法,通过使用回调函数来确保数据准备好后再进行操作:
add.js
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'test'
});
module.exports = {
fetchData: function(callback) {
connection.connect();
connection.query('select * from userinfo', function(err, res, fields) {
if (err) throw err;
callback(res); // 这里调用回调函数,并传入查询结果
connection.end(); // 关闭连接
});
}
};
app.js
var express = require('express');
var app = express();
var add = require('./add.js');
app.get('/', function(req, res) {
add.fetchData(function(data) { // 使用回调函数获取数据
res.render('index.jade', { data: data }); // 将数据传递给模板
});
});
app.listen(3000);
解释
- 模块化:将数据库查询逻辑封装在一个模块中,以提高代码的可维护性和复用性。
- 回调函数:使用回调函数来处理异步操作的结果。这样可以确保数据准备好后再进行下一步操作。
- 数据传递:在
app.js
中,当请求到达时,调用fetchData
并传递一个回调函数来接收查询结果,然后将其传递给渲染函数。
这种方法能有效解决你遇到的问题,确保数据正确地从数据库中查询并传递到视图层。