无法使用mssql和hapi获取数据

时间:2019-02-22 15:35:04

标签: hapi node-mssql

第一次使用 hapi mssql ,我正在努力从mssql查询获取数据到hapi响应。这是我的代码:

const Boom = require('boom');
const sql = require('mssql');
const dbConfig = require('../config/sql');

module.exports = [{
        method: 'GET',
        path: '/storeInfos',
        handler: storeInfos
    }
];

function storeInfos(request, h) {
    sql.connect(dbConfig).then(() => {
            const req = new sql.Request();
            req.query('select id, name from StoreInfo').then((data) => {
                    return h.response(data);
                })
                .catch((err) => {
                    reply(Boom.badRequest(err.message, err));
                });
        })
        .catch((err) => {
            reply(Boom.badRequest(err.message, err));
        });
}

执行/ storeInfos函数时,返回以下错误 “错误:storeInfos方法未返回值,承诺或引发错误。”

我尝试遵循其他示例,但是没有运气,也找不到很好的教程。我真的很坚持这一点,我们将不胜感激一些帮助,并且还会提供一些指向一些不错的教程的链接。 预先感谢...

1 个答案:

答案 0 :(得分:0)

弄清楚了它,并通过使用await / async使它能够工作,这要归功于How to return value from the promise function in h.reponse这个帖子。 这是工作代码

const Boom = require('boom');
const sql = require('mssql');
const dbConfig = require('../config/sql');

module.exports = [{
        method: 'GET',
        path: '/storeInfos',
        handler: async function (request, h) {
            return await storeInfos(request, h);
        }
    }
];

async function storeInfos(request, h) {
    let pool;
    try {
        pool = await sql.connect(dbConfig)
        let data = await pool.request()
            .query('select Id, Name from StoreInfo')

        if (!data || data.recordset.length == 0) {
            throw Boom.notFound();
        }
        return h.response(data.recordset);
    } catch (err) {
        throw Boom.internal(err.message);
    } finally {
        if (pool) {
            sql.close();
        }
    }
}

可能不是最优雅的解决方案,但它可行。 我读到,不必关闭池连接,但是如果不调用 sql.close(),则在第二次调用该函数时,会出现关于“全局连接已存在”的错误。