Javascript 将查询结果传递到node.js到html的变量中

Javascript 将查询结果传递到node.js到html的变量中,javascript,html,node.js,sql-server,ejs,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 }, (e

我试图使用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);
    });
});
函数(也在同一文件中):

然后,当我加载页面时,我得到的结果是“未定义”

但是如果我只通过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
函数,函数的其余部分继续运行(
返回结果;
)。这就是为什么没有定义。

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


是这样的。调用
getJson
时,执行
sql.connect
函数,函数的其余部分继续运行(
返回结果;
)。这就是您未定义的原因。

您在等待数据之前发送数据

您应该了解什么是异步函数

请看下面的代码:

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

});

在等待数据之前,您正在发送数据

您应该了解什么是异步函数

请看下面的代码:

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

});