无法让 Node mssql 正常工作
Can't get Node mssql to work properly
这是我目前使用 mssql 的方式,但有时会出错:
JavaScript:
router.get('/academiejaren', (req, res) => {
sql.connect(dbconfig, function (err) {
var request = new sql.Request();
if (err) {
console.log(err);
return;
}
request.query("SELECT * FROM [Alg].[DefAJ];", function (err, recordset) {
if (err) {
console.log(err);
return;
}
else {
res.end(JSON.stringify(recordset));
}
});
request.query();
});
});
错误:
{ ConnectionError: Connection is closed.
at C:\Users\Milan\Documents\Octopus\Octopus 2.0\node_modules\mssql\lib\main.js:1569:17
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9)
name: 'ConnectionError',
message: 'Connection is closed.',
code: 'ECONNCLOSED' }
(node:556) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ConnectionError: Connection is closed.
(node:556) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我正在使用 3.2.0 版,因为我无法使用最新的 4.0.2 版...任何帮助或一些很好的示例,因为我无法理解文档.. .
提前致谢!
编辑
已将小型测试项目更新至 4.0.2。我让它工作了。打算将我的 API 更改为此更新。
router.get('/academiejaren', (req, res) => {
(async function () {
try {
let pool = await sql.connect(config)
let result1 = await pool.request()
.query('SELECT * FROM [Alg].[DefAJ];')
res.send(JSON.stringify(result1.recordset));
} catch (err) {
res.send("CAUGHT ERROR academiejaren");
}
})()
sql.on('error', err => {
// ... error handler
})
});
现在我还有一个小问题,我应该如何处理 catch 和 sql.on()?我应该如何处理错误?
router.get('/academiejaren', (req, res) => {
sql.connect(dbconfig, function (err) {
var request = new sql.Request();
if (err) {
console.log(err);
return;
}
request.query("SELECT * FROM [Alg].[DefAJ];", function (err, recordset) {
if (err) {
console.log(err);
return;
}
else {
res.send(JSON.stringify(recordset));
}
});
request.query();
});
});
你确实做了 res.end
,end
退出了,你想要 res.send
我做的有点不同:
router.get('/', function(req, res, next) {
sql.connect(dbconfig).then(function() {
// Query
new sql.Request().query("Your query")
.then(function(recordset) {
//console.dir(recordset);
res.setHeader('Content-Type', 'application/json');
res.send( recordset );
}).catch(function(err) {
// ... query error checks
});
});
});
现在在你的 dbconfig 中确保你得到它:
mssql://用户:密码@server/db
这是我目前使用 mssql 的方式,但有时会出错:
JavaScript:
router.get('/academiejaren', (req, res) => {
sql.connect(dbconfig, function (err) {
var request = new sql.Request();
if (err) {
console.log(err);
return;
}
request.query("SELECT * FROM [Alg].[DefAJ];", function (err, recordset) {
if (err) {
console.log(err);
return;
}
else {
res.end(JSON.stringify(recordset));
}
});
request.query();
});
});
错误:
{ ConnectionError: Connection is closed.
at C:\Users\Milan\Documents\Octopus\Octopus 2.0\node_modules\mssql\lib\main.js:1569:17
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9)
name: 'ConnectionError',
message: 'Connection is closed.',
code: 'ECONNCLOSED' }
(node:556) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ConnectionError: Connection is closed.
(node:556) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我正在使用 3.2.0 版,因为我无法使用最新的 4.0.2 版...任何帮助或一些很好的示例,因为我无法理解文档.. .
提前致谢!
编辑
已将小型测试项目更新至 4.0.2。我让它工作了。打算将我的 API 更改为此更新。
router.get('/academiejaren', (req, res) => {
(async function () {
try {
let pool = await sql.connect(config)
let result1 = await pool.request()
.query('SELECT * FROM [Alg].[DefAJ];')
res.send(JSON.stringify(result1.recordset));
} catch (err) {
res.send("CAUGHT ERROR academiejaren");
}
})()
sql.on('error', err => {
// ... error handler
})
});
现在我还有一个小问题,我应该如何处理 catch 和 sql.on()?我应该如何处理错误?
router.get('/academiejaren', (req, res) => {
sql.connect(dbconfig, function (err) {
var request = new sql.Request();
if (err) {
console.log(err);
return;
}
request.query("SELECT * FROM [Alg].[DefAJ];", function (err, recordset) {
if (err) {
console.log(err);
return;
}
else {
res.send(JSON.stringify(recordset));
}
});
request.query();
});
});
你确实做了 res.end
,end
退出了,你想要 res.send
我做的有点不同:
router.get('/', function(req, res, next) {
sql.connect(dbconfig).then(function() {
// Query
new sql.Request().query("Your query")
.then(function(recordset) {
//console.dir(recordset);
res.setHeader('Content-Type', 'application/json');
res.send( recordset );
}).catch(function(err) {
// ... query error checks
});
});
});
现在在你的 dbconfig 中确保你得到它: mssql://用户:密码@server/db