【问题标题】:Error after deploying node js app to MS azure service将节点 js 应用程序部署到 MS azure 服务后出错
【发布时间】:2021-09-06 11:47:52
【问题描述】:

所以我使用节点、套接字 IO 创建了一个应用程序,当我开始部署它时,一切都很顺利,但我开始出现 500、503 和 504 错误,但后来我做了一些更改并重新部署它,但后来我摆脱了这些我收到的错误,但我收到 403 禁止错误,说我没有权限,这是我正在使用 VS 代码和 Azure 部署的社交网络应用程序,但我无法弄清楚,因为这是我第一次使用天蓝色服务

这是我的主要代码

const express = require('express');
const app = express();
const port =  process.env.PORT || 3000;
const middleware = require('./middleware')
const path = require('path')
const bodyParser = require("body-parser")
const mongoose = require("./database");
const session = require("express-session");
const http = require('http');
// const server = require('./server');



const server = app.listen(port, () => console.log("Server listening on port " + port));
const io = require("socket.io")(server, { pingTimeout: 60000 });

app.set("view engine", "pug");
app.set("views", "views");

app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, "public")));

app.use(session({
    secret: "bbq chips",
    resave: true,
    saveUninitialized: false
}))

// Routes
const loginRoute = require('./routes/loginRoutes');
const registerRoute = require('./routes/registerRoutes');
const logoutRoute = require('./routes/logout');
const postRoute = require('./routes/postRoutes');
const profileRoute = require('./routes/profileRoutes');
const uploadRoute = require('./routes/uploadRoutes');
const searchRoute = require('./routes/searchRoutes');
const messagesRoute = require('./routes/messagesRoutes');
const notificationsRoute = require('./routes/notificationRoutes');

// Api routes
const postsApiRoute = require('./routes/api/posts');
const usersApiRoute = require('./routes/api/users');
const chatsApiRoute = require('./routes/api/chats');
const messagesApiRoute = require('./routes/api/messages');
const notificationsApiRoute = require('./routes/api/notifications');

app.use("/login", loginRoute);
app.use("/register", registerRoute);
app.use("/logout", logoutRoute);
app.use("/posts", middleware.requireLogin, postRoute);
app.use("/profile", middleware.requireLogin, profileRoute);
app.use("/uploads", uploadRoute);
app.use("/search", middleware.requireLogin, searchRoute);
app.use("/messages", middleware.requireLogin, messagesRoute);
app.use("/notifications", middleware.requireLogin, notificationsRoute);

app.use("/api/posts", postsApiRoute);
app.use("/api/users", usersApiRoute);
app.use("/api/chats", chatsApiRoute);
app.use("/api/messages", messagesApiRoute);
app.use("/api/notifications", notificationsApiRoute);

app.get("/", middleware.requireLogin, (req, res, next) => {

    var payload = {
        pageTitle: "Home",
        userLoggedIn: req.session.user,
        userLoggedInJs: JSON.stringify(req.session.user),
    }

    res.status(200).render("home", payload);
})

io.on("connection", socket => {

    socket.on("setup", userData => {
        socket.join(userData._id);
        socket.emit("connected");
    })

    socket.on("join room", room => socket.join(room));
    socket.on("typing", room => socket.in(room).emit("typing"));
    socket.on("stop typing", room => socket.in(room).emit("stop typing"));
    socket.on("notification received", room => socket.in(room).emit("notification received"));

    socket.on("new message", newMessage => {
        var chat = newMessage.chat;

        if(!chat.users) return console.log("Chat.users not defined");

        chat.users.forEach(user => {
            
            if(user._id == newMessage.sender._id) return;
            socket.in(user._id).emit("message received", newMessage);
        })
    });

})

错误截图。

【问题讨论】:

  • Dayan ibrar,问题的任何更新

标签: node.js azure azure-devops socket.io web-deployment


【解决方案1】:

Azure 应用服务不支持所有本机模块,因此可能无法编译具有特定先决条件的模块。

有 2 种变通方法被证明是成功的,适用于当今几乎所有可用的原生模块:

  • 在安装了所有本机模块先决条件的 Windows 机器上运行 npm install。然后,将创建的 node_modules 文件夹作为应用程序的一部分部署到 Azure 应用服务。

  • Azure 应用服务可以配置为在部署期间执行自定义 bash 或 shell 脚本,让您有机会执行自定义命令并精确配置 npm install 的运行方式。有关如何执行此操作的视频,请参阅 Custom Website Deployment Scripts with Kudu

如果在将 nodejs 部署到 MS Azure 服务时出现错误 403,那么感谢 Shaun Xu 在此处发布您的 suggestion 作为答案以帮助社区成员。

另请参阅此403 forbidden error 以获得更多见解!

如果您收到 500 个错误而没有正确的消息,那么我想建议您一些故障排除步骤:

如何检查真正的错误而不是 500

  1. 在 Azure 门户中为您的应用服务启用诊断日志
  2. 选择日志流
  3. 刷新您的网站。现在您应该会在日志流中看到真正的错误消息。
  4. 确保您的入口点位于根文件夹中。
    • 如果您的入口点是“./bin/www”,请手动将此文件移动到根目录并更新 Web.config 中的 and 部分以使其正常工作。

    • 进行这些更改后再次部署。


您可以Enable diagnostics logging for web apps in Azure App Service,它会根据您选择的级别记录信息,您可以查看 Azure 系统或 Azure Storage 上的日志文件。

您可以利用Streaming Logs and the Console 进行快速的在线故障排除。由于 Azure Web Apps 上的 Node.js 应用程序是通过 IISNode 模块处理的。因此您可以利用 IISNode 配置来启用模块的日志功能,详情请参阅Best practices and troubleshooting guide for node applications on Azure Web Apps

您可以将 Node-Inspector 用于 node.js 应用程序,如 Debug your app with Node-Inspector 所述

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2012-10-12
    • 2021-06-28
    • 2019-11-26
    • 2020-10-20
    • 2015-06-28
    • 1970-01-01
    相关资源
    最近更新 更多