【发布时间】:2015-02-20 02:55:19
【问题描述】:
我一直在开发一个 node.js 应用程序,该应用程序使用 mssql 模块连接到 SQL Server 数据库,但我遇到了麻烦。
基本上,mssql 似乎存在某种错误,如果任何类型的查询结果返回一定数量的记录,它只会使应用程序崩溃。没有什么太重的。我说的是 50 到 100 条记录!
这也不是特定于查询的。无论结果如何,我的所有查询都会发生这种情况。
如果我将查询限制为返回 10、20、40 条记录(使用“SELECT TOP x ...”),查询运行良好,但一旦我将限制增加到更多记录,应用程序就会崩溃没有一条错误消息。没有例外。什么都没有。
开始发生这种情况的实际记录数因查询而异。看起来 mssql 有一个错误或设计限制,会影响它可以返回的数据量。
我错过了什么吗?是否有我应该更改的设置以避免这种情况?或者,我可以使用其他任何 npm 连接到 SQL Server 吗?
不用说,这对我来说是一个表演障碍。我应该完全放弃 node.js 吗?
关键是,如果我找不到连接到 SQL Server 的正确方法,那么我将无法在此应用程序中使用 node.js,而必须切换到其他东西。
谢谢!
更新 1
以下是导致此问题的部分代码:
// Basic modules
var express = require("express");
var bodyParser = require("body-parser");
// Custom modules
var settings = require("./lib/settings.js").GetSettings();
var app = express();
app.use(bodyParser.json());
app.use('/', express.static(__dirname + "/public"));
/***************************************************************************************************************/
// Routes
app.get("/GetBrands", function(req, res) {
var sql = require('mssql');
var config = {
user: settings.DatabaseConfiguration.user,
password: settings.DatabaseConfiguration.password,
server: settings.DatabaseConfiguration.server,
database: settings.DatabaseConfiguration.database
};
var cmd = "SELECT TOP 5 * FROM Brands WHERE Status = 'a'";
var connection = new sql.Connection(config, function(err) {
// ... error checks
if (err) {
console.log(err);
}
// Query
var request = new sql.Request(connection); // or: var request = connection.request();
request.verbose = true;
request.query(cmd, function(err, recordset) {
// ... error checks
if (err) {
console.log(err);
}
console.log(recordset);
connection.close();
});
});
});
/***************************************************************************************************************/
// Enable the port listening.
app.listen(process.env.PORT || 8050);
如果我将“SELECT TOP 5 * ...”的 SQL 语句更改为更大的数字,例如 60、80 或 100,应用程序就会崩溃。此外,响应只是每个品牌的名称和一个 ID。没有什么太复杂或太重的东西。
更新 2:
这些是我所遵循的步骤,这些步骤总是使应用程序崩溃:
- 通过输入命令行运行应用程序:node app.js
- 在网络浏览器中,转到http://localhost:8050/GetBrands。第一次,我得到的结果很好。没有崩溃。
- 再次运行它。应用程序崩溃。每次。
我还发现了其他东西。我正在使用 WebStorm 来编辑代码。如果我从那里启动调试器,我不会崩溃,也不会出现任何问题。该应用程序可以正常工作。只有当我直接从命令行运行它时,它才会崩溃,或者在没有调试器监听的情况下从 WebStorm 运行它......这有多疯狂??
我尝试应用 WebStorm 调试器使用的相同命令行参数,但没有任何区别。
我希望有人能尽快阐明,因为我已经非常接近完全放弃这个项目的 node.js 了。
我可以切换到使用不同的 SQL Server npm 包,但那是哪一个呢?我已经尝试过mssql、node-sqlserver-unofficial 和乏味的,他们都有同样的问题,所以我猜这是TDS的问题。
【问题讨论】:
-
我有点怀疑这是节点的问题,如果有的话,它是连接器或它连接到的服务器的问题。你能告诉simple node.js app你正在测试这个问题吗?
-
应用程序如何崩溃?有错误信息吗?
-
不幸的是,没有。根本没有错误消息。它只是停止节点应用程序而没有任何消息。
标签: sql-server node.js