gpt4 book ai didi

Node.js 和 Express Web API 无法在 Azure 上运行

转载 作者:行者123 更新时间:2023-12-03 03:34:19 25 4
gpt4 key购买 nike

我使用此示例使用 React SPA 和 Node.js & Express Web API 创建了一个基本应用程序 https://github.com/Azure-Samples/ms-identity-javascript-react-tutorial/tree/main/5-AccessControl/1-call-api-roles

应用程序在本地运行良好 - 前端身份验证和后端 API 调用均按预期工作。

当我在 Azure 上部署应用程序时,前端工作正常,但后端 API 调用根本无法工作并且超时 - 我也没有在后端看到任何日志。在本地,我可以看到有关调用 API 调用的所有 console.log。

我已经尝试了许多更改来解决下面提到的 Node.js 应用程序问题,并且我正在寻求有关哪些其他设置/更改可能有助于让 Node.js 应用程序在 Azure 上运行的指导。

  • 我尝试在 Azure 以及/wwwroot/server - node app.js 中手动运行后端,我看到日志显示 API 正在监听,但 API 调用超时。

enter image description here

  • web.config.js 指向 server/app.js

  • 在 Azure 上,React 应用程序仅在端口 443 上成功运行,如下所示,当设置为其他端口时根本不会运行:

client/package.json

...
"scripts": {
"start": "set PORT=443&& react-scripts start",
...

当指定如下时,它在本地运行在所有端口上:

client/package.json

...
"scripts": {
"start": "set HTTPS=true&&set SSL_CRT_FILE=certificate.crt&&set SSL_KEY_FILE=privateKey.key&&set PORT=3000&& react-scripts start",
...
  • Azure 上的提取调用超时
client/fetch.js


export const getTest = async (env) => {
// const accessToken = await getToken();

const headers = new Headers();
// const bearer = `Bearer ${accessToken}`;

// headers.append("Authorization", bearer);

const options = {
method: "GET",
headers: headers,
};

return fetch(protectedResources.apiList.test, options)
.then(response => response.json())
.catch(error => console.log(error));
}
  • 在本地 server/app.js 中,注释和使用身份验证逻辑都适用于 API 调用,但在 Azure 上均不起作用。
  • 还尝试在 http 和 https 上运行 Node.js。附言。本地仅 HTTPS 适用于客户端和 Node ,因为 redirectUri 为 https
server/app.js


const path = require('path');
const express = require("express");
const cors = require("cors");
const axios = require("axios");
const PORT = process.env.PORT || 8080;
require("dotenv").config();
const app = express();
app.use(cors());
app.use(express.json());

//app.use(express.static(path.resolve(__dirname, '../client/build')));

app.get("/api/test", (req, res) => {
res.json("hi");
});

//...other bearer token code

// https.createServer(httpsOptions, app).listen(PORT, () => console.log(`Server is running on port ${PORT}`));

app.listen(PORT, () => console.log(`Server is running on port ${PORT}`));

The project folder structure is

最佳答案

如果您使用的是 azure VPS,请从 azure 用户面板启用端口。 Azure 会限制甚至从 Windows 防火墙启用的端口。因此,请确保从用户面板/控制面板启用端口。

关于Node.js 和 Express Web API 无法在 Azure 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73854108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com