Не удается запустить Node JS Deployment в Azure - PullRequest
0 голосов
/ 21 мая 2018

Я следовал этому руководству:

https://docs.microsoft.com/en-us/azure/app-service/app-service-web-get-started-nodejs

Я развернул приложение Express JS с помощью инструмента "Zip Deploy":

https://[app_name_here].scm.azurewebsites.net/ZipDeploy

Когда я пытаюсь вызвать свои общедоступные API, я получаю сообщение об ошибке: « Ресурс, который вы ищете, удален, изменилось его имя или временно недоступен. »

Странно то, что мое приложение Express JS прекрасно работает локально.Я несколько раз пытался изменить свой index.js, чтобы правильно отобразить маршруты API, но в Azure, похоже, ничего не работает.Вот мой текущий код.

По общему признанию, он немного дезорганизован / запутан, потому что я объединял логику из 3 разных приложений Express.

...

index.js

var express = require('express');
var cors = require('cors');
var bodyParser = require('body-parser');
var app = express();
var cookieParser = require('cookie-parser');
var path = require('path');
app.use(cors({ origin:'*' }));
app.set('port', (process.env.PORT || 5000));
app.use(bodyParser.json());

var indexRouter = require('./routes/index');
app.set('views', path.join(__dirname, 'views'));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);

//Router imports
var chainCoreDevRoutes = require('./routes/chainCoreDevRoutes');
var mongoDevRoutes = require('./routes/mongoDevRoutes');
var stuffMartServiceRoutes = require('./routes/stuffMartServiceRoutes');
app.use('/dev/chainCore', chainCoreDevRoutes);
app.use('/dev/mongo', mongoDevRoutes);
app.use('/api', stuffMartServiceRoutes);

//app.get('*', function(request, response) { response.sendFile(path.join(__dirname, 'public/index.html')); });

app.listen(app.get('port'), function() {
  console.log('Node app is running wubbalubba dub dub! on port', app.get('port'));
});

...

маршрутов / index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;

...

web.config (необходим для среды Azure)

<configuration>
    <system.webServer>

        <!-- indicates that the index.js file is a node.js application 
        to be handled by the iisnode module -->

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

        <!-- adds index.js to the default document list to allow 
        URLs that only specify the application root location, 
        e.g. http://mysite.antarescloud.com/ -->

        <defaultDocument enabled="true">
            <files>
                <add value="index.js" />
            </files>
        </defaultDocument>

      </system.webServer>
</configuration> 

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Мое решение: Не следуйте инструкциям / блогам

Я использовал Visual Studio 2017 и нашел шаблон проекта под названием «Базовое приложение Azure Node.js Express 4».Базовый проект работал без сбоев, и установка заняла всего около 5 минут.

0 голосов
/ 13 августа 2018

Самым простым способом развертывания nodejs является использование терминала.

Вы просто клонируете проект на сервер, как на обычной машине.Выполните «npm install». Запустите проект с помощью «npm start» или «node index.js» (это зависит от вашего имени файла).Проверьте, запускается ли программа на сервере. Вам лучше использовать почтальон, чтобы проверить, работают ли API.Если есть ошибки, исправьте их.Если не установить pm2 на серверную машину.Затем запустите программу, используя «pm2 index.js» (соответственно).

Каждый раз, когда вы вносите изменения в код, полезно ввести «pm2 restart all», чтобы применить изменения

0 голосов
/ 24 мая 2018

Я использовал экспресс-генерацию для создания своего простого проекта, а затем успешно развернул его в Azure.Пожалуйста, обратитесь к моим файлам.

app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.set('port', process.env.PORT || 5000);

console.log("+++++++++++++++"+ app.get('port'));

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

app.listen(app.get('port'), function(){
          console.log('Express server listening on port ' + app.get('port'));
          });

web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
     This configuration file is required if iisnode is used to run node processes behind
     IIS or IIS Express.  For more information, visit:

     https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/web.config
-->

<configuration>
  <system.webServer>
    <!-- Visit http://blogs.msdn.com/b/windowsazure/archive/2013/11/14/introduction-to-websockets-on-windows-azure-web-sites.aspx for more information on WebSocket support -->
    <webSocket enabled="false" />
    <handlers>
      <!-- Indicates that the server.js file is a node.js site to be handled by the iisnode module -->
      <add name="iisnode" path="app.js" verb="*" modules="iisnode"/>
    </handlers>
    <rewrite>
      <rules>
        <!-- Do not interfere with requests for node-inspector debugging -->
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
          <match url="^app.js\/debug[\/]?" />
        </rule>

        <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
        <rule name="StaticContent">
          <action type="Rewrite" url="public{REQUEST_URI}"/>
        </rule>

        <!-- All other URLs are mapped to the node.js site entry point -->
        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
          </conditions>
          <action type="Rewrite" url="app.js"/>
        </rule>
      </rules>
    </rewrite>

    <!-- 'bin' directory has no special meaning in node.js and apps can be placed in it -->
    <security>
      <requestFiltering>
        <hiddenSegments>
          <remove segment="bin"/>
        </hiddenSegments>
      </requestFiltering>
    </security>

    <!-- Make sure error responses are left untouched -->
    <httpErrors existingResponse="PassThrough" />

    <!--
      You can control how Node is hosted within IIS using the following options:
        * watchedFiles: semi-colon separated list of files that will be watched for changes to restart the server
        * node_env: will be propagated to node as NODE_ENV environment variable
        * debuggingEnabled - controls whether the built-in debugger is enabled

      See https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/web.config for a full list of options
    -->
    <iisnode watchedFiles="web.config;*.js"/>
  </system.webServer>
</configuration>

маршрутов / index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;

Результат доступа:

enter image description here

Вы можете проверить различия. Любая проблема, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...