为什么脚本会卡在此nodejs脚本的连接中

时间:2018-08-01 23:21:51

标签: sql-server node.js express

我正在使用http://www.tutorialsteacher.com/nodejs/access-sql-server-in-nodejs中的以下内容:

var express = require('express');
var app = express();

app.get('/', function (req, res) {

    var sql = require("mssql");

    // config for your database
    var config = {
        user: 'sa',
        password: 'mypassword',
        server: 'localhost', 
        database: 'SchoolDB' 
    };

    // connect to your database
    sql.connect(config, function (err) {

        if (err) console.log(err);

        // create Request object
        var request = new sql.Request();

        // query to the database and get the records
        request.query('select * from Student', function (err, recordset) {

            if (err) console.log(err)

            // send records as a response
            res.send(recordset);

        });
    });
});

var server = app.listen(5000, function () {
    console.log('Server is running..');
});

当我在浏览器中运行此文件时,页面第一次运行。但是,如果我刷新它,则表明连接未打开。当我在Web服务器上下文之外运行此命令时,它永远不会退出sql.connect函数,需要使用Node中的Control-C进行停止。有谁知道为什么这段代码会卡在sql.connect函数中?

1 个答案:

答案 0 :(得分:1)

首先:您使用的示例基于node-mssql的2.3版。当前版本为ist 4.1。建议使用node-mssql的一种方法是使用connectionPools。我修改了您的代码以使用池。

第二:如果有错误,则在您的代码中,您永远不会到达res.send()点。因此,我修改了您的代码,以便在出现错误时发回somethig。

另一个提示:我会将依赖项放在应用程序的顶部(不在路由之内)...它将以两种方式工作,但是您的代码会更加清晰。

'use strict';

const express = require('express');
const app = express();
const sql = require("mssql");

// config for your database
const config = {
    user: 'sa',
    password: 'mypassword',
    server: 'localhost', 
    database: 'SchoolDB',
    options: {
        encrypt: false
    },
    pool: {
        max: 10,
        min: 0,
        idleTimeoutMillis: 30000
    }    
};

// create a connection pool
const pool = new sql.ConnectionPool(config, err => {
    if (err) {
        console.log(err);
    }
});

app.get('/', function (req, res) {

    // create Request object (using the connection pool)
    const request = new sql.Request(pool);

    // query to the database and get the records
    request.query('select * from Student', (err, recordset) => {
        if (err) {
            console.log(err);
            res.send(err);
        } else {
            // send records as a response
            res.send(recordset);
        }
    });
});

var server = app.listen(5000, function () {
    console.log('Server is running..');
});

希望有帮助(上面的代码未经测试...)