Nodejs中MySQL的查询数据能在另一个页面接受到吗
Nodejs中MySQL的查询数据能在另一个页面接受到吗
我在这个文件查询的数据,能在另一个页面返回来嘛?
exports.p=function(sql){
connection.query(sql,function(err,fields){
//return this.fields;
return fields;
})
};
上面这个是查询页的代码
var config=require('./config');
var sql=“select * from user”; console.log(config.p(sql))
这个是需要接受的页面代码
当然可以!在Node.js中,你可以通过模块化的方式将查询逻辑封装在一个函数中,并在其他页面或路由中调用该函数以获取查询结果。以下是一个具体的例子来说明如何实现这一点。
查询页的代码
首先,我们创建一个模块来处理数据库查询:
db.js
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'yourusername',
password: 'yourpassword',
database: 'yourdatabase'
});
// 导出一个函数,用于执行SQL查询
module.exports = function(sql, callback) {
connection.query(sql, (err, results, fields) => {
if (err) throw err;
callback(results); // 返回查询结果
});
};
需要接受数据的页面代码
接下来,我们可以在另一个页面中引入这个模块并使用它:
app.js
const express = require('express');
const db = require('./db'); // 引入db模块
const app = express();
app.get('/users', (req, res) => {
const sql = "SELECT * FROM user";
db(sql, (results) => {
res.json(results); // 将查询结果以JSON格式返回给客户端
});
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
- db.js 文件中定义了一个导出的函数,该函数接受一个SQL查询字符串和一个回调函数作为参数。当数据库查询完成时,回调函数会被调用,并传入查询结果。
- app.js 文件中,我们使用
require
导入了db.js
模块,并在GET请求路由/users
中调用了该函数。查询结果被传递给回调函数,并通过res.json
方法发送给客户端。
这样,你就可以在不同的页面或路由中重用数据库查询逻辑,并获取查询结果。
我怎么接受不到查询数据
我也遇到这个问题了。怀疑是nodejs异步事件驱动的原因。。也就是说你执行config.p(sql)的时候查询还没有执行。
由于是异步性return fields;
根本不是你想要的效果!改成这样试试。
exports.p = function(sql, callback){
connection.query(sql,function(err,fields){
callback(fields);
});
};
var config = require(’./config’);
var sql = “select * from user”;
config.p(sql, function(data){
console.log(data);
});
我也解决这个问题,方法是在调用查询函数的页面建立一个exports函数,然后在查询结果的回调函数中调用这个函数。 db.js: exports.select = function() { client.query( 'SELECT * FROM ’ + TEST_TABLE,
function selectCb(err, results, fields) { if (err) { throw err; } client.end(); app.getresult(results); }); }
app.js: db.select(); exports.getresult = function(result){ console.log(result); }
要在Node.js中将一个页面通过MySQL查询的数据传递到另一个页面,可以使用模块化的方式来组织代码,并利用异步函数处理查询结果。你的问题主要涉及如何正确地从数据库查询数据并将其传递给另一个页面。
以下是修改后的代码示例:
查询模块 (queryModule.js)
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'yourusername',
password: 'yourpassword',
database: 'yourdatabase'
});
exports.p = function(sql) {
return new Promise((resolve, reject) => {
connection.query(sql, function(err, fields) {
if (err) return reject(err);
resolve(fields);
});
});
};
接收数据的页面 (app.js)
const express = require('express');
const queryModule = require('./queryModule');
const app = express();
app.get('/getData', async (req, res) => {
try {
const sql = "SELECT * FROM user";
const data = await queryModule.p(sql);
res.json(data);
} catch (error) {
res.status(500).send('Server error');
}
});
app.listen(3000, () => console.log('Server running on port 3000'));
解释
- 查询模块 (
queryModule.js
): 使用Promise来处理异步操作。这样可以在调用p
函数时使用await
关键字来等待结果。 - 接收数据的页面 (
app.js
): 使用Express框架来创建一个简单的API端点/getData
,该端点执行SQL查询并将结果作为JSON响应发送回客户端。
这种方法使得代码更加清晰和可维护,并且能够正确处理异步数据库查询的结果。