簡體   English   中英

將查詢結果傳遞到 node.js 到 html 的變量中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM