我正在尝试使用 Node.js 从 MSSQL 获取一些数据,然后将数据从 Node 传递到我的 HTML 布局(EJS),但我在最后一部分遇到了一些问题,这就是我的问题我正在尝试做:
app.js 文件:
app.get('/', (req, res) => {
var data = getJson(); // Function that return my data
res.render(__dirname + '/index.ejs', {
data: data
}, (err, file) => {
if (err) console.log(err);
res.send(file);
});
});
函数(也在同一文件中):
function getJson(config) {
sql.connect(config, err => {
if (err) return err;
var request = new sql.Request();
request.query('select * from data', (err, json) => {
if (err) return err;
var result = JSON.stringify(json); // I tried to stringfy this, but doesn't work neither
console.log(result); // This console inside of the function works!
return result;
});
});
return result;
};
然后,当我加载页面时,我得到的结果是“未定义”。
但是如果我只通过 app.get 传递一个简单的变量,它就可以工作!:
app.get('/', (req, res) => {
var data = 'data'; // Simple variable
res.render(__dirname + '/index.ejs', {
data: data // It works!!!
}, (err, file) => {
if (err) console.log(err);
res.send(file);
});
});
然后我尝试制作一个简单的函数,看看是否可以显示结果,确实可以!:
function getJson() {
var data = 'data'; // It works too!!!
return data;
};
所以我不知道我做错了什么,你们有人可以帮助我吗?
最佳答案
您正在发送数据,然后等待他们...
你应该了解什么是异步函数...
看下面的代码:
function getJson(config) {
return new Promise((resolve, reject) => {
sql.connect(config, err => {
if (err) return resolve(err);
var request = new sql.Request();
request.query('select * from data', (err, json) => {
if (err) return reject(error);
var result = JSON.stringify(json); // I tried to stringfy this, but doesn't work neither
console.log(result); // This console inside of the function works!
resolve(result);
});
});
})
};
app.get('/', (req, res) => {
getJson()
.then(data => {
res.render(__dirname + '/index.ejs', {
data: data
}, (err, file) => {
if (err) console.log(err);
res.send(file);
});
})
.catch(error => { /* do something */ });
});
关于javascript - 将查询结果从 Node.js 传递到 html 的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59392269/