HRESULT:0x2 HTTP 状态:500 HTTP 子状态:1002 HTTP 原因:内部服务器错误

问题描述 投票:0回答:1

我正在尝试在 IIS 上托管我的 NodeJS 和 React Web 应用程序,但我似乎无法让它工作。我已经尝试了我可以在网上找到的所有解决方案,但仍然遇到此 http 200 错误。(https://i.sstatic.net/gwYx1isI.png) 另外,我正在尝试将其托管在虚拟机上,我'我不确定这是否会影响任何事情。任何建议表示赞赏!顺便说一句,这是我的 web.config 文件(https://i.sstatic.net/t62x5kyf.jpg

下面是我在端口 3000 上运行的 server.js 文件

import cors from 'cors';
import express from "express";
import sql from "mssql";
import { PORT } from './config.js';
import inventoryRouter from './routes/inventoryRoute.js';
import transferRouter from './routes/transferRoute.js';
import orderRouter from './routes/orderRoute.js';
import path from 'path';
import { fileURLToPath } from 'url';

const sqlConfig = {
user: "testuser",
password: '1234',
// server: 'DESKTOP-VN9PRPU\\SQLEXPRESS', // or 'localhost' for a local instance
server: 'YIHANG\\SQLEXPRESS',
// server: 'MDPADMIN\\SQLEXPRESS',
database: 'inventory',
driver: 'msnodesqlv8',
options: {
    // encrypt: false,
    // trustServerCertificate: true,
    trustedConnection: false,
    encrypt: false
}
};

const app = express();

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.use(express.static(path.join(__dirname, '../frontend/dist')));

let pool;

async function connectDB() {
try {
    pool = await new sql.connect(sqlConfig);
    app.listen(PORT, () => { //PORT is 3000
        console.log("app is running le");
    })
    console.log("connected le");
} catch (err) {
    console.error('error is ', err);
}
}

app.use((req, res, next) => {
req.pool = pool;
next();
})


app.use('/inventory', inventoryRouter);
app.use('/transfers', transferRouter);
app.use('/orders', orderRouter);

app.use('/images', express.static('images'))


connectDB();

我已尝试以下解决方案,但均无济于事

  1. 下载iisnode和rerouter模块
  2. 授予 IIS_ISURS 完全权限
  3. 将 iisnode web.config 中的 devErrosEnabled 和 LoggingEnabled 设置为 false
node.js asp.net iis web-applications
1个回答
0
投票

尝试使用

app.listen(process.env.PORT || 3000)
代替
app.listen()

在 Windows 上使用 IIS 部署 Node.js 时,可能会出现端口冲突。使用

process.env.PORT
可以动态适配端口,保证通讯顺畅,不冲突。

app.listen(process.env.PORT || 3000)
将从环境变量
process.env.PORT
读取端口。 如果它存在并且具有有效值,则
app.listen
将使用该值作为端口。在其他情况下,它将使用
3000
作为默认端口号。

© www.soinside.com 2019 - 2024. All rights reserved.