javascript - 将查询结果从 Node.js 传递到 html 的变量中

标签 javascript html node.js sql-server ejs

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

相关文章:

javascript - SAPUI5 图标大小和颜色的变化

javascript - 需要在 javascript Node js 中对此代码进行一些解释

javascript - Node.js 页面重定向 AJAX 登录?重定向后使用函数调用?

java - Selenium WebDriver 无法通过链接文本找到元素

asp.net - 这个表结构如何实现DIV

javascript - 我应该使用哪个 HTML 事件监听器?

node.js - 尽管用户在网站上注销,但 Socket.io 授权仍然存在

javascript - 如何使用 Vue.js 在选择选项上使用转换

javascript - 我有这个错误: Cannot read property 'value' of null, I dont understand why

javascript - 元素通过计数器自动显示和隐藏