我正在使用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函数中?
答案 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..');
});
希望有帮助(上面的代码未经测试...)