首页 > 解决方案 > 由于发生内部服务器错误,无法显示该页面。Node.js 天蓝色

问题描述

我有 node.js 应用程序,当我将它部署到 Azure App 服务时它在本地工作,我收到以下错误:

由于发生内部服务器错误,无法显示该页面。

下面是我的 server.js 代码:

"use strict";

Object.defineProperty(exports, "__esModule", { value: true });

const express = require("express");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const errorhandler = require("errorhandler");
const morgan = require("morgan");
const cors = require("cors");
const router_1 = require("./routes/router");
const bunyan_logger_1 = require("./lib/loggers/bunyan.logger");
require("reflect-metadata");
//const database = require('./data/dbprovider/dbmssql');
class Server {
    constructor() {
        this.port = process.env.PORT || 3000;
        this.logger = new bunyan_logger_1.bunyanLogger();
        this.app = express();
        this.initExpressMiddleWare();
        this.initCustomMiddleware();
        this.initRoutes();
        this.start();
    }
    start() {
        this.app.listen(this.port, (err) => {
            if (err) {
                this.logger.StartLogger().error('In Server.TS start see details: ' + err);
            }
            else {
                console.log('Listening on http://localhost:%d', process.env.NODE_ENV, this.port);
            }
        });
    }
    initExpressMiddleWare() {
        this.app.use(express.static(__dirname + '/public'));
        this.app.use(morgan('dev'));
        this.app.use(bodyParser.urlencoded({ extended: true }));
        this.app.use(bodyParser.json());
        this.app.use(errorhandler());
        this.app.use(cookieParser());
        this.app.use(cors());
        // Add headers
        this.app.use(function (req, res, next) {
            // Website you wish to allow to connect
            const allowOrigin = ['https://senserver4.azurewebsites.net','http://localhost:3000'];
            const origin = req.headers.origin;
            if (allowOrigin.indexOf(origin) > -1) {
                res.setHeader('Access-Control-Allow-Origin', origin);
            }
            // Request methods you wish to allow
            res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
            // Request headers you wish to allow
            res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
            // Set to true if you need the website to include cookies in the requests sent
            // to the API (e.g. in case you use sessions)
            res.setHeader('Access-Control-Allow-Credentials', true);
            // Pass to next layer of middleware
            next();
        });
        //this.app.use(csrf({ cookie: true }));
        // this.app.use((req: { csrfToken: () => void; }, res: { locals: { _csrf: any; }; cookie: (arg0: string, arg1: any) => void; }, next: () => void) => {
        //     let csrfToken = req.csrfToken();
        //     res.locals._csrf = csrfToken;
        //     res.cookie('XSRF-TOKEN', csrfToken);
        //     next();
        // });
        process.on('uncaughtException', (err) => {
            if (err)
                console.log(err, err.stack);
        });
    }
    initCustomMiddleware() {
        if (process.platform === "win32") {
            require("readline").createInterface({
                input: process.stdin,
                output: process.stdout
            }).on("SIGINT", () => {
                process.exit(1);
            });
        }
        process.on('SIGINT', () => {
            process.exit(1);
        });
    }
    initRoutes() {
        (new router_1.Router()).load(this.app, './controllers');
    }
}
let server = new Server();
//# sourceMappingURL=server.js.map

我在项目的根目录中创建了 web.config 文件,下面是 web.config 代码:

<?xml version="1.0" encoding="utf-8"?>

<configuration>
<appSettings>

</appSettings>
<system.webServer>
<staticContent>
  <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>

<modules runAllManagedModulesForAllRequests="false" />

<iisnode watchedFiles="web.config;*.js;routes\*.js;views\*.pug"/>

<handlers>
  <add name="iisnode" path="app.js" verb="*" modules="iisnode" />

</handlers>

<security>
  <requestFiltering>
    <hiddenSegments>
      <remove segment="bin" />
    </hiddenSegments>
  </requestFiltering>
</security>

<rewrite>
  <rules>
    <clear />

    <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
      <match url="^server.js\/debug[\/]?" />
    </rule>

    <rule name="app" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
      <match url="iisnode.+" negate="true" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
      <action type="Rewrite" url="app.js" />
    </rule>
  </rules>
</rewrite>
</system.webServer>

我已将 server.js 添加到路径映射中,但无法解决问题。

我在控制台中遇到的错误:

Tue Jan 14 2020 16:01:06 GMT+0000 (Coordinated Universal Time): Application has thrown an uncaught exception and is terminated:
D:\home\site\wwwroot\public\data\repos\Agent.repo.js:13
async getAllAgent() {
      ^^^^^^^^^^^
SyntaxError: Unexpected identifier
at Object.exports.runInThisContext (vm.js:76:16)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (D:\home\site\wwwroot\public\controllers\api\agents\agent.controller.js:3:22)
at Module._compile (module.js:570:32)     

标签: node.jsazureazure-devops

解决方案


此错误是 IIS 服务器 500 错误的常见描述。仅通过一般描述很难找到问题的根本原因。

请尝试下面的 web.config 代码以显示可能对您有帮助的详细信息,并且不要评论您以前的代码。

<configuration>
    <system.webServer>
        <httpErrors errorMode="Detailed" />
        <asp scriptErrorSentToBrowser="true"/>
    </system.webServer>
    <system.web>
        <customErrors mode="Off"/>
        <compilation debug="true"/>
    </system.web>
</configuration>

推荐阅读