javascript - 如果从 express 请求中调用,则未建立 SQL 连接
问题描述
我正在构建我的第一个 Node.JS API,并且从昨天开始我一直在尝试解决一个问题。
基本上,当有人连接到我的端点时,我需要从 SQL 数据库中获取一些数据。问题是根本没有建立到 SQL 的连接。为了便于阅读,我创建了代码的简化版本:
var Connection = require('tedious').Connection;
const express = require('express');
require('dotenv').config();
class Server {
constructor() {
this.sqlAccessor = new ModelsSqlAccessor();
this.app = express();
this.app.get("/api/endpoint1", async (req, res) => {
let data = await this.sqlAccessor.executeQuery("some query");
res.send(data);
});
}
start() {
this.app.listen(3000, () => console.log("Listening on port 3000..."));
}
}
class ModelsSqlAccessor {
constructor() {
let config = {
userName: process.env.MJIOT_MODELSDB_USER,
password: process.env.MJIOT_MODELSDB_PASS,
server: process.env.MJIOT_MODELSDB_SERVER,
options: {
database: process.env.MJIOT_MODELSDB_DATABASE,
encrypt: true
}
};
this.connection = new Connection(config);
}
executeQuery(query) {
let conn = this.connection;
return new Promise(function(resolve, reject) {
conn.on('connect', function(err) {
console.log('INSIDE CONNECT');
//execute query...
});
});
}
}
let server = new Server();
server.start();
所以,在这个例子中,我有 2 个类,其中 Server 是 Express 的包装器,ModelsSqlAccessor 是访问 SQL DB 的一种方式。在 ModelsSqlAccessor 的 executeQuery(query) 方法中,我连接到数据库。当连接发生(或连接出错)时,应显示“INSIDE CONNECT”消息。在给定的示例中,根本不显示此消息。相反,当请求到来时,响应永远不会到来——我的节点应用程序永远不会从 executeQuery("some query") 调用返回,也永远不会向客户端返回任何值。
对我来说奇怪的是,如果我移动这个电话:
let data = await this.sqlAccessor.executeQuery("some query");
在其他地方(例如服务器的构造函数中的几行,在设置 GET 端点之前(当然删除 AWAIT 关键字,因为构造函数不能是 ASYNC)),当我的应用程序运行时建立连接,我看到“INSIDE CONNECT “ 信息。
这里有什么问题?如果此调用在端点处理程序内部,为什么永远不会建立连接?
解决方案
推荐阅读
- sas - 具有表名 SAS 的变量
- azure-active-directory - Azure AD - 应用注册 - CSOM - 更新 Web 挂钩订阅到期
- powerapps - 使用 powerapps 创建登录页面
- css - 使用 Sass 定位 BEM 格式的 CSS 选择器
- kdb - 如何在 KDB 中按月选择?
- powershell - Powershell 正则表达式多行解析
- javascript - 使用从 JavaScript 获取从 API“TheMealDB”获取一份膳食食谱我无法访问=>erro 404
- ruby - 在 Windows 上安装 shopify-cli
- c# - 2D统一平台游戏玩家移动问题
- powershell - PowerShell:杀死/查找当前用户的所有进程,白名单除外