当我点击 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 浏览
但是当我这样做时https://appurl/assets/img.png,它返回的图像不是我所期望的。
当您访问 https://appurl/assets/img.png 并获取图像时,表明服务器正在正确提供静态文件。
并在
"outDir": "./dist",
配置文件中添加 tsconfig.json
。
在本地配置后,我可以将帖子请求发送到服务器。
最初,由于指向服务器的端点不正确,我也遇到了相同的 404 错误。
进行更改后,我已将应用程序部署到 azure 应用程序服务。
通过管道或编辑器进行部署对于您的错误没有影响。
部署后,我可以成功运行我的应用程序,也可以访问端点。
Kudu 控制台: