首页 > 解决方案 > 使用 IISNODE 在 IIS 10 中部署后 NodeJs 应用程序未连接到 MySql

问题描述

我已经使用 NodeJS、MySQL 和 express 构建了一个应用程序,部署在窗口服务器机器上的 IIS 10 上。当我在本地运行此应用程序时,它工作正常。但是在部署 NodeJS 应用程序后没有连接到 MySQL 数据库。我无法弄清楚为什么会这样。它是否需要在 IIS 或 web config 上进行任何配置?我已将数据库连接详细信息存储在 .env 文件中并从那里读取它。我也在服务器机器上安装了 odbc MySQL 驱动程序。

  1. 数据库连接文件
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;
  1. 我的 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;
  1. 调用模型
 let row = await MainModel.find({ProductID: data[i].inputString, country: data[i].country});
  1. 环境文件
# DB Configurations
DB_HOST="######"
DB_USER="#########"
DB_PASS="##########"
DB_DATABASE="##########"

在 IIS 10 上工作需要哪些额外步骤?它是本地工作文件。

我是否错过了在 IIS 10 上运行此应用程序的任何内容?

标签: mysqlnode.jsiis

解决方案


推荐阅读