如何告诉azure运行节点server.js

时间:2019-03-11 08:52:33

标签: node.js angular azure visual-studio-2017

我在Azure上也运行了angular 6应用,但是我需要为一些服务器变量添加一个server.js文件,我在根目录上也添加了server.js文件

Server.js

const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const http = require('http');
const app = express();
var router = express.Router();
const publicIp = require('public-ip');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));
// Angular DIST output folder
app.use(express.static(path.join(__dirname, 'dist/projectname')));


app.get('/getip', (req, res) => {
  var ipcheck = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
  (async () => {
    console.log(await publicIp.v4());
    res.json({
      ip: await publicIp.v4(),
      ip2: req.headers['x-forwarded-for'],
      ip3: req.connection.remoteAddress,
      ip4: req.ip
    });

  })();
});
// Send all other requests to the Angular app
app.get('/*', (req, res) => {
    res.sendFile(path.join(__dirname, 'dist/projectname/index.html'));
});
app.get('/', (req, res) => {
  res.sendFile(path.join(__dirname, 'dist/prjectname/index.html'));
});


//Set Port
const port = process.env.PORT || '3000';
app.set('port', port);

const server = http.createServer(app);

server.listen(port, () => console.log(`Running on localhost:${port}`));

然后我转到cmd并运行节点server.js,它在localhost上运行良好 但是现在我想在azure服务器上做同样的事情如何部署它。 或如何始终告诉azure 运行节点server.js

2 个答案:

答案 0 :(得分:0)

我假设您已经知道如何在Azure Portal或Azure CLI中创建Azure WebApp。然后,我看到您在Visual Stodio 2017中开发了Node.js应用程序,并希望使用相同的工具将其部署到Azure,因此建议您参考NTVS Wiki页面Publish to Azure Website using Web Deploy来了解如何做。< / p>

接下来,在部署之前,您首先需要了解以下四个注意事项。

  1. 请在创建的WebApp中确认Node.js版本,默认版本为0.10+。您可以通过URL https://<your webapp name>.scm.azurewebsites.net/DebugConsole和命令node -v访问Web应用程序的Kudo控制台以获取它。您可以在Azure CLI中将其设置为运行az webapp config appsettings set --resource-group <your ResourceGroup> --name <app_name> --settings WEBSITE_NODE_DEFAULT_VERSION=10.14.1之类的命令,或在Azure门户中遵循下图。有关Azure WebApp上的Node版本的更多详细信息,请参阅我对SO线程azure webapp webjob node version的回答。

enter image description here

  1. 在您的项目中,必须有一个Web.config文件才能与Azure WebApp上的IIS对话以了解如何启动Node应用程序。 Web.config文件的内容与Kudu Wiki页面Using a custom web.config for Node apps中的示例相同,您可以直接复制它,因为您的bootstrap js文件名也是server.js

    < / li>
  2. Azure WebApp上的侦听端口是由环境随机分配的,您可以从环境变量HTTP_PLATFORM_PORT中获取,该环境变量也将由process.env.PORT获取。因此,您将不会在代码中为port做任何事情。

  3. 您的Node应用程序将部署到Azure WebApp的路径home/site/wwwroot中,也可以通过Kudu控制台进行访问。因此,无需任何工具,您还可以使用Kudu控制台来部署您的应用程序,只需将wwwroot中的文件结构与项目相同即可,其中包括所有js文件和目录node_modules和{{ 1}}。

答案 1 :(得分:0)

只需构建您的项目 ng build --prod ,然后在vs 17中的dist文件夹中打开项目文件夹,然后添加

package.json

index.js

web.config

您可以从here获得这3个文件,并且可以根据需要编辑index.js,我只需要添加

app.get('/getip', (req, res) => {
  res.json({
      ip: req.headers['x-forwarded-for'].split(":")[0]
    });
});

app.get('*', (req, res) => {
   res.sendFile(path.join(__dirname, 'index.html'));
});

这通过nodejs运行我的应用。

当我打电话给getip时,这会给我服务器IP,否则返回处理所有路由的angular index.html。