首页 > 解决方案 > 使用 NodeJS 依次执行 SQL 查询

问题描述

我有一个使用基本身份验证来验证用户的端点。一旦成功完成,我想执行另一个查询,但前提是身份验证成功。问题是第二个查询不会等到用户验证查询完成后。我该如何做我正在尝试的事情?

var auth = function (req, res, next) {
    function unauthorized(res) {
        res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
        return res.send(401);
    }

    var user = basicAuth(req);

    if(!user || !user.name || !user.pass) {
        return unauthorized(res);
    }

    userName = user.name;
    userPassword = user.pass;

    return next();
};

app.get('/counties/', auth, function(req, res) {
    queryString = util.format('SELECT * from Users WHERE email = \'%s\' and PWDCOMPARE(N\'%s\', Password) = 1',  userName, userPassword);
    res.setHeader('Content-Type', 'application/json');
    res.set('Content-Type', 'application/json');
    endpointQuery(queryString, res);
    if (endpointQuery(queryString, res) === 1) {
        queryString = util.format('SELECT distinct county from name WHERE state_province = \'KY\' and county <> \'\' order by county');
        res.setHeader('Content-Type', 'application/json');
        res.set('Content-Type', 'application/json');
        dbQuery(queryString, res);
    } else {
        console.log('Not authorized!');
    }
});

function endpointQuery(query, response) {
    var config = {
        server: 'db server',
        database: 'db',
        user: 'user',
        password: 'password',
        requestTimeout: 300000,
        options: {
            encrypt: true
        }
    };

    var connection = new sql.Connection(config);
    connection.connect().then(function () {
        var req = new sql.Request(connection);
        req.query(query).then(function (recordset) {
            results = recordset;
            connection.close();

            // Convert results to JSON string
            var jsonString = JSON.stringify(results);
            // response.send(recordset);
            console.log('Results Length: ' + results.length);
            if (results.length > 0) {
                return 1;
            } else {
                return 0;
            }
        })
            .catch(function (err) {
                console.log('Error1: ' + err);
                connection.close();
                // response.send(err);
                return 0;
            });
    })
        .catch(function (err) {
            console.log('Error2: ' + err);
            // response.send(err);
            return 0;
        });
}

标签: node.jsasynchronous

解决方案


推荐阅读