【问题标题】:passing the result of a query into a variable from node.js to html将查询结果传递给从 node.js 到 html 的变量
【发布时间】:2020-04-11 00:29:40
【问题描述】:

我正在尝试使用 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;
};

所以我不知道我在做什么错了,你们中的任何人都可以帮助我吗?

【问题讨论】:

    标签: javascript html node.js sql-server ejs


    【解决方案1】:

    您在等待他们之前发送数据...

    你应该了解什么是异步函数...

    看看下面这段代码:

    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  */  });
    
    });
    

    【讨论】:

      【解决方案2】:

      您的getJson 正在执行异步操作。这就是为什么你将一个回调传递给sql.connect,另一个传递给request.query

      是这样的。当您调用getJson 时,将执行sql.connect 函数,并且该函数的其余部分继续运行(return result;)。这就是你不确定的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-25
        • 1970-01-01
        • 2020-11-13
        • 2018-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多