Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js mssql返回记录集_Javascript_Node.js - Fatal编程技术网

Javascript Node.js mssql返回记录集

Javascript Node.js mssql返回记录集,javascript,node.js,Javascript,Node.js,我不熟悉Node.js,所以我仍然习惯于异步编程和回调。我正在尝试查询MS SQL Server数据库并返回要在我的视图中显示的记录集 打印到console.log时,mssql查询工作正常。我的问题是不知道如何正确返回数据 以下是我的mssql查询: var config = require('../../db/config'); async function getJobList(activeJD) { const sql = require('mssql') le

我不熟悉Node.js,所以我仍然习惯于异步编程和回调。我正在尝试查询MS SQL Server数据库并返回要在我的视图中显示的记录集

打印到console.log时,mssql查询工作正常。我的问题是不知道如何正确返回数据

以下是我的mssql查询:

    var config = require('../../db/config');

async function getJobList(activeJD) {
    const sql = require('mssql')
    let sqlResult = '';
    try {
        await sql.connect(config)
        const result = await sql.query(`select top 10 [jobid], [title] from OrgJobs where ActiveJD = ${activeJD}`);

        console.log(result); // working correctly
        sqlResult = result;
    } catch (err) {
        // ... error checks
    }

    return sqlResult;
}

module.exports = getJobList;
使用express,我试图让我的路由调用此sql查询,并将其结果传递给我的视图。这是我的路线代码:

const express = require('express');
//....
const app = express();
//....
app.get('/jds', (req, res) => {
    const getJobList = require("../models/jds/list");

    let jobList = getJobList(0);

    res.render('jds/index', {
        title: appName + ' | Job Descriptions',
        header: 'Active Job Descriptions',
        data: jobList
    });

})

getJobList()中的记录集未返回到jobList。我读过很多书,我相信这是因为getJobList是异步的,并且在getJobList返回其值之前调用了jobList,对吗?如果是这样的话,我相信我需要添加回调,但我不确定如何将其实现到我已有的回调中。非常感谢您的建议

异步
方法将始终返回一个。这意味着
工作列表
是一个承诺

您可以使用
wait
语法从承诺中“解包”并获取
sqlResult
(您需要使回调方法
async
),或者只需使用
。然后
从承诺中获取返回值(即:
sqlResult
):


这是一个很好的答案。但是,我们如何在1个app.get路径中包含2个查询?在
.get
中运行
sql.query
两次,以便运行每个查询。使用它提供的回调函数获取每个query@JorgeLopez像这样的事情我简直说不出话来。非常感谢。诚恳地说。@JorgeLopez是的,使用第二个选项,您可以使用加载微调器作为表的默认内容。然后使用ajax/jQuery向
/queryOfTable
端点发送HTML/呈现内容的请求。加载后,用您收到的实际内容替换加载微调器
let jobList = getJobList(0);
app.get('/jds', (req, res) => {
    const getJobList = require("../models/jds/list");

    const jobList = getJobList(0); // jobList is a promise
    jobList.then(result => { // result is sqlResult
      res.render('jds/index', {
        title: appName + ' | Job Descriptions',
        header: 'Active Job Descriptions',
        data: result
      });
    });  
})