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里面 查询出来的 数据?


3 回复

为了在 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!');
});

解释

  1. add.js:

    • queryData 函数是一个异步函数,它使用回调函数来处理查询结果。
    • 当查询成功时,调用回调函数并传入查询结果。
    • 连接在查询结束后被关闭。
  2. 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);

解释

  1. 模块化:将数据库查询逻辑封装在一个模块中,以提高代码的可维护性和复用性。
  2. 回调函数:使用回调函数来处理异步操作的结果。这样可以确保数据准备好后再进行下一步操作。
  3. 数据传递:在 app.js 中,当请求到达时,调用 fetchData 并传递一个回调函数来接收查询结果,然后将其传递给渲染函数。

这种方法能有效解决你遇到的问题,确保数据正确地从数据库中查询并传递到视图层。

回到顶部