通过部署到 Azure 容器的 Azure 应用服务使用我的 NodeJS 应用程序运行 Express 服务器

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

当我点击 server.mjs 中的 https://appurl/server-running 端点时,TS 应用程序中带有 Express 服务器的 NodeJS 收到 404 错误。但是当我这样做 https://appurl/assets/img.png 时,它返回的图像不是我所期望的。 默认的 https://appurl/ 是一个基本的 TS 页面,运行良好。 我尝试通过 web.config 将 url 请求重定向到 server.mjs,希望使用 iisnode,但这也不起作用。另外,我没有看到任何 IISNODE 日志。

我还尝试通过 kudu 在 Azure 容器中导航,其中部署了我的应用程序以手动启动 node server.mjs,然后点击端点,但得到了相同的结果。查看进程资源管理器,除非我通过 kudu cli 手动调用它,否则我的 Express 服务器不会运行,这是另一个问题。 我现在将 cors 设置为 * 。 此 Wep 应用程序是作为部署在 Azure 容器上的应用程序服务创建的,我目前使用的是 azure 免费层,假设免费层不允许 iisnode?我也无法在容器上安装任何东西。 节点 v20.18.0 我在这里缺少什么,为什么我的 Express 服务器没有运行并且我的重定向在部署后不起作用?

HTTP 错误 404.0 - 未找到 您要查找的资源已被删除、更名或暂时不可用。

PS:我对这些概念有初级的理解,我做这个项目是作为一种学习经历。

package.json 片段

`  "type": "module",
  "main": "server.mjs",
  "scripts": {
    "dev": "vite",
    "mainbuild": "tsc -b && vite build && npx tsc -b tsconfig.server.json",
    "build": " npm run mainbuild && npm run rename.mjs && npm run postbuild",
    "postbuild": "cp web.config dist/",
    "rename.mjs": "renamer --find \"/\\.js$/\" --replace \".mjs\" \"./dist/*.js\"",
    "lint": "eslint .",
    "preview": "vite preview",
    "start": "concurrently \"node server.mjs\" \"vite\""`

网络配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="iisnode" path="server.mjs" verb="*" modules="iisnode" resourceType="Unspecified" />
    </handlers>
    <defaultDocument>
      <files>
        <clear />
        <add value="server.mjs" />
      </files>
    </defaultDocument>
    <iisnode>
      <nodeProcessCommandLine>node</nodeProcessCommandLine>
      <loggingEnabled>true</loggingEnabled>
    </iisnode>
  </system.webServer>
</configuration>

server.ts 转换为js,然后重命名为mjs

import express from "express";
import cors from "cors";
import {existsSync} from "fs";
const {FRONTEND_URL, EXPRESS_SERVER_CONFIG} = await import(
  existsSync("./config.ts") ? "./config.ts" : "./config.mjs"
);
import JSONBig from "json-bigint";
const app = express();

app.use(
  cors({
    origin: FRONTEND_URL, 
    methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"], 
    credentials: true,
  })
);
app.use(bodyParser.json());

app.get("/server-running", (req, res) => {
  console.log(req.baseUrl);
  res.send("Server is Running");
});

app.use((req, res) => {
  res.status(404).json({error: "404"});
});

const PORT = process.env.PORT || 3000; 
app.listen(PORT, () => {
  console.log(
    `Server is running on port ${PORT} front end url: ${FRONTEND_URL}`
  );
});

CI/CD CI/CD 管道

捻角羚 404 错误和 Kudu 浏览

node.js typescript azure-web-app-service azure-container-apps nodejs-express-server
1个回答
0
投票

但是当我这样做时https://appurl/assets/img.png,它返回的图像不是我所期望的。

当您访问 https://appurl/assets/img.png 并获取图像时,表明服务器正在正确提供静态文件。

并在

"outDir": "./dist",
配置文件中添加
tsconfig.json

enter image description here

在本地配置后,我可以将帖子请求发送到服务器。

最初,由于指向服务器的端点不正确,我也遇到了相同的 404 错误。

进行更改后,我已将应用程序部署到 azure 应用程序服务。

enter image description here

通过管道或编辑器进行部署对于您的错误没有影响。

部署后,我可以成功运行我的应用程序,也可以访问端点。

Kudu 控制台: enter image description here

enter image description here

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