[英]passing the result of a query into a variable from node.js to html
我正在嘗試使用 Node.js 從 MSSQL 獲取一些數據,然后將數據從節點傳遞到我的 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;
};
所以我不知道我做錯了什么,你們中的任何人都可以幫助我嗎?
您的getJson
正在執行異步操作。 這就是為什么您將回調傳遞給sql.connect
而另一個傳遞給request.query
。
它是這樣的。 當您調用getJson
,將執行sql.connect
函數,並且該函數的其余部分繼續運行( return result;
)。 這就是為什么你得到未定義。
你在等待他們之前發送你的數據......
你應該學習什么是異步函數......
看看下面的代碼:
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 */ });
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.