我正在尝试托管Azure中GitHub上托管的node.js应用程序。我已经把它归结为仍然失败的最小例子。
这是我的./server/index.js
文件:
var http = require('http');
var server = http.createServer(function (request, response){
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hello world!\n");
});
server.listen(80);
console.log("Server running at http://127.0.0.1:80/");
这是我的package.json
文件:
{
"name": "testapp",
"version": "1.0.0",
"description": "",
"main": "./server/index.js",
"scripts": {
"start": "node ./server/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
这是我的应用程序的所有文件。如果我在localhost上用npm start
启动它就可以了,我得到了“Hello world!”按预期回应。
然后我在GitHub
上创建了一个仓库,并将此应用程序推送到GitHub
,并验证了这两个文件都存在。
然后我在Azure中创建了一个Web app
,并将其设置为从此GitHub
repo进行部署,看起来构建工作正常。这是Generating Deployment Script
:
Using cached version of deployment script (command: 'azure -y --no-dot- deployment -r "D:\home\site\repository" -o "D:\home\site\deployments\tools" --node --sitePath "D:\home\site\repository"').
这是Running Deployment Command
:
Command: "D:\home\site\deployments\tools\deploy.cmd"
Handling node.js deployment.
KuduSync.NET from: 'D:\home\site\repository' to: 'D:\home\site\wwwroot'
Copying file: 'server\index.js'
Using start-up script server/index.js from package.json.
Generated web.config.
The package.json file does not specify node.js engine version constraints.
The node.js application will run with the default node.js version 4.2.3.
Selected npm version 3.5.1
npm WARN brewingdaytest@1.0.0 No description
npm WARN brewingdaytest@1.0.0 No repository field.
Finished successfully.
而Azure表示delpoyment成功。
但是,当我导航到appname.azurewebsites.net
时,它会以Status Code
的{{1}}回复,而根本没有响应数据。
我在这里错过了什么谜题,让它按预期工作?
答案 0 :(得分:1)
Azure会在process.env.PORT
为您的应用提供端口,因此您可以执行以下操作:
process.env.PORT = process.env.PORT || 80;
server.listen(process.env.PORT);
如果应用程序在Azure上运行,它将使用Azure分配的端口。如果它在localhost上运行,它将使用80代替。