node.js Web アプリケーションを作成しました。現在、DBにMSSQLを使用しています。node-mssqlパッケージを追加しました。対応する SQL 関数を実行する関数をsql.jsという別のファイルに作成しました。controller.jsはawait キーワードでそれらを呼び出します。一度に 1 つのリクエストを行ったときはエラーはありませんでしたが、2 つのリクエストがほぼ同時に来ると、次のエラーが発生します。
(ノード:136648) UnhandledPromiseRejectionWarning: 未処理の約束の拒否 (拒否 ID: 1): ReferenceError: エラーが定義されていません
(ノード:136648) [DEP0018] DeprecationWarning: 未処理の約束の拒否は非推奨です。今後、処理されないプロミスの拒否は、ゼロ以外の終了コードで Node.js プロセスを終了します。
私は接続に関係があると思います.グローバル接続を使用していますが、controller.jsをデバッグし、プールが定義されていることを確認したので、問題の原因がわかりません.
SQL.js
const sql = require('mssql');
const config = {
user: 'admin',
password: 'linux',
server: '11.222.33.44',
database: 'master'
}
const pool = new sql.ConnectionPool(config);
pool.on('error', err => {
if (err) {
console.log('sql errors', err);
}
if (!err) {
pool.connect();
}
});
module.exports.getUsers = async() => {
// const pool = await sql.connect(config);
try{
const result = await pool.request()
.query(`SELECT * FROM master.dbo.users ORDER BY user_id`)
// sql.close();
return result.recordset;
}catch(err){
throw error;
}
}
module.exports.getProducts = async() => {
// const pool = await sql.connect(config);
try{
const result = await pool.request()
.query(`SELECT * FROM master.dbo.products ORDER BY product_zip`)
// sql.close();
return result.recordset;
}catch(err){
throw error;
}
}
controller.js
const express = require('express');
const {getInfo, getUsers, getProducts} = require('../lib/sql');
const router = express.Router();
...
/// Get Users
router.get('/controller/getUsers', async(req, res, next) => {
console.log('get: /controller/getUsers');
const users = await getUsers();
res.status(200).json(users);
});
/// Get Products
router.get('/controller/getProducts', async(req, res, next) => {
console.log('get: /controller/getProducts');
const products = await getProducts();
res.status(200).json(products);
});
module.exports = router;