mysql - 使用 IISNODE 在 IIS 10 中部署后 NodeJs 应用程序未连接到 MySql
问题描述
我已经使用 NodeJS、MySQL 和 express 构建了一个应用程序,部署在窗口服务器机器上的 IIS 10 上。当我在本地运行此应用程序时,它工作正常。但是在部署 NodeJS 应用程序后没有连接到 MySQL 数据库。我无法弄清楚为什么会这样。它是否需要在 IIS 或 web config 上进行任何配置?我已将数据库连接详细信息存储在 .env 文件中并从那里读取它。我也在服务器机器上安装了 odbc MySQL 驱动程序。
- 数据库连接文件
const dotenv = require('dotenv');
dotenv.config();
const mysql2 = require('mysql2');
class DBConnection {
constructor() {
this.db = mysql2.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_DATABASE
});
this.checkConnection();
}
checkConnection() {
this.db.getConnection((err, connection) => {
if (err) {
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
console.error('Database connection was closed.');
}
if (err.code === 'ER_CON_COUNT_ERROR') {
console.error('Database has too many connections.');
}
if (err.code === 'ECONNREFUSED') {
console.error('Database connection was refused.');
}
}
if (connection) {
console.log('Database connected successfully')
connection.release();
}
return
});
}
query = async (sql, values) => {
return new Promise((resolve, reject) => {
const callback = (error, result) => {
if (error) {
reject(error);
return;
}
resolve(result);
}
// execute will internally call prepare and query
this.db.execute(sql, values, callback);
}).catch(err => {
const mysqlErrorList = Object.keys(HttpStatusCodes);
// convert mysql errors which in the mysqlErrorList list to http status code
err.status = mysqlErrorList.includes(err.code) ? HttpStatusCodes[err.code] : err.status;
throw err;
});
}
}
// like ENUM
const HttpStatusCodes = Object.freeze({
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: 422,
ER_DUP_ENTRY: 409
});
module.exports = new DBConnection().query;
- 我的 model.js 文件
const query = require('../db/db-connection');
const { multipleColumnSet } = require('../utils/common.utils');
class MainModel {
tableName = 'ProductTable_status';
find = async (params = {}) => {
let {ProductID, country} = params;
let sql = `SELECT * FROM ${this.tableName} WHERE ProductID= ? AND country = ?`;
return await query(sql, [ProductID, country]);
}
module.exports = new MainModel;
- 调用模型
let row = await MainModel.find({ProductID: data[i].inputString, country: data[i].country});
- 环境文件
# DB Configurations
DB_HOST="######"
DB_USER="#########"
DB_PASS="##########"
DB_DATABASE="##########"
在 IIS 10 上工作需要哪些额外步骤?它是本地工作文件。
我是否错过了在 IIS 10 上运行此应用程序的任何内容?
解决方案
推荐阅读
- python - Django:导入模型有效,之后立即导入它的实例失败
- dom - Vue.js - 路由更改后未从父组件中删除 DOM 元素
- apache - 如何修复 Apache 服务器子 pid 637 退出信号分段错误(11),/etc/apache2 中可能的核心转储问题
- couchbase - 聚合 couchbase 文档数据
- c# - 让 C# 控制台应用程序包装完整的单词而不是拆分它们
- swift - 在另一个 ViewController 中打开全尺寸图像,可以捏合缩放,例如 Whatsapp
- android - 谷歌材料库更新后,底页视图无法完全展开?
- matrix - 如何在 Fortran 90 中获得 nxn 矩阵的共轭?
- java - Java Regex:“10{1,1 %d},10{2,1 %d}”等模式的正则表达式是什么?
- python - linux Ubuntu下创建虚拟环境时出错