Node.js mssql返回记录集

时间:2019-05-24 02:31:47

标签: 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')
    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;

使用快递,我试图让我的路线将此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,对吗?如果是这样,我相信我需要添加一个回调,但是我不确定如何将其实现到现有的回调中。任何建议,我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

async方法将始终返回Promise。这意味着jobList是一个 Promise

let jobList = getJobList(0);

您可以使用await语法来“解包”并从promise中获得sqlResult(您需要使回调方法async来完成此操作),也可以简单地使用.then来从您的​​承诺中获得回报值(即:sqlResult):

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

    let 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
      });
    });  
})