繁体   English   中英

将 Node.JS express API App 部署到 Azure App Service

[英]Deploying Node.JS express API App to Azure App Service

我正在尝试将我的 Node.JS 应用程序部署到 Azure 应用程序服务。 我遵循了这个介绍: https://docs.microsoft.com/de-de/azure/app-service/app-service-web-get-started-nodejs 这是我的应用程序的代码:

var express = require('express'); // Web Framework
var app = express();
var sql = require('mssql'); // MS Sql Server client
const { request } = require('http');

// Connection string parameters.
var sqlConfig = {
    user: 'username',
    password: 'password',
    server: 'serveraddress',
    database: 'databasename'
}

// Start server and listen on http://localhost:80/
var server = app.listen(80, function () {
    var host = server.address().address
    var port = server.address().port

    console.log("app listening at http://%s:%s", host, port)
});

app.get('/tags', function (req, res) {
    sql.connect(sqlConfig, function() {
        var request = new sql.Request();
        request.query('select * from dbo.Tag', function(err, recordset) {
            if(err) console.log(err);
            res.end(JSON.stringify(recordset)); // Result in JSON format
        });
    });
    
})

该应用程序在本地运行没有任何问题。 通过键入localhost:80/tags在浏览器中进行简单测试,将所有标签返回为 json。

但是部署到 Azure 之后会出现这个错误:

2020-06-25T17:11:58.055Z ERROR - Container wearxapplication_0_ed215082 for site wearapplication did not start within expected time limit. Elapsed time = 230.0801107 sec
2020-06-25T17:11:58.074Z ERROR - Container wearxapplication_0_ed215082 didn't respond to HTTP pings on port: 8080, failing site start. See container logs for debugging.
2020-06-25T17:11:58.088Z INFO  - Stopping site wearxapplication because it failed during startup.

这是什么意思? 怎么解决?

查看错误,我相信您在 Linux 上使用单容器配置的应用服务。 如果是这样,请不要显式侦听端口 80 或任何其他端口(除非您通过自定义容器进行部署,在该容器中您可以控制 docker 文件)。 在幕后,Linux 上的应用服务部署了一个容器并公开了一个自动检测的端口(docker expose)。 您的显式侦听端口不太可能与自动检测到的端口匹配。 用下面的代码片段替换你的服务器引导代码,让端口从环境中获取:

// Start server and listen on http://localhost:port/ for local
const port = process.env.PORT || 1337; // for local debugging choose any available port
var server = app.listen(port, function () {
    var host = server.address().address;
    console.log("app listening at http://%s:%s", host, port);
});

要检查的另一件事是是否有任何依赖项(在您的情况下是 express,mssql)在启动时无法解决。 当您在 node_modules 文件夹中缺少依赖项时,可能会发生这种情况。 您可以通过启动日志 Stream(您可以在 Azure 门户应用服务刀片中找到)来检查。 您可能会看到类似这样的错误日志 stream

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM