Мой узел js развернул приложение по умолчанию до 3000, несмотря на использование process.env.PORT - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь развернуть приложение Node.В app.listen я использую process.env.PORT, но служба поддержки постоянно сообщает мне, что мое приложение работает только на порту 3000.

Я искал часы напрасно и не могу понять, что я сделалнеправильно.my APP.JS

const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const app = express();
var expressValidator = require('express-validator');
var cookieParser = require('cookie-parser');
var connection = require('./routes/connection');
var bcrypt = require('bcrypt');

var session = require('express-session');
var passport = require('passport');
var MySQLStore = require('express-mysql-session')(session);
var LocalStrategy = require('passport-local').Strategy;

var clientRoutes        = require('./routes/clients'),
dashboardRoutes      = require('./routes/dashboard'),
carerRoutes         = require('./routes/carers'),
indexRoutes         = require('./routes/index'),
shiftRoutes         = require('./routes/shifts'),
timesheetRoutes     = require('./routes/timesheets'),
reportRoutes        = require('./routes/reports'),
graphRoutes         = require('./routes/graph'),
adminRoutes         = require('./routes/admin'),
registerRoutes      = require('./routes/register');

app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));
app.use(expressValidator());//immedietely after body parser
app.use(cookieParser());
app.use("/public", express.static(path.join(__dirname, 'public')));

var options = {
    host: DATABASE_LOCATION,
    user: DATABASE_USER,
    database: DATABASE_NAME,
    password: DATABASE_PASSWORD,
    multipleStatements: true //for more than one query in a get route
};

var sessionStore = new MySQLStore(options);

app.use(session({
  secret: '12fgsgsdfadfafafasfss',
  resave: false,
  store: sessionStore,
  saveUninitialized: false
  // cookie: { secure: true }
}))

app.use(passport.initialize());
app.use(passport.session());

passport.use(new LocalStrategy(
function(username, password, done) {
    // console.log(username);
    // console.log(password);


 connection.query('select id, password from users where username = ?', [username], function(err, results, fields){
      if (err) { done(err)};
      if (results.length === 0) {
        done(null, false);
      } else {
        const hash = results[0].password.toString();
        var user_id = results[0].id;

        bcrypt.compare(password, hash , function(err, response){
          if (response) {
            return done(null, {user_id: user_id});
          } else {
            return done(null, false);
          };
        });
      };
    }); 
  }));

app.use(indexRoutes);
app.use(dashboardRoutes);
app.use(carerRoutes);
app.use(clientRoutes);
app.use(shiftRoutes);
app.use(timesheetRoutes);
app.use(reportRoutes);
app.use(graphRoutes);
app.use(adminRoutes);
app.use(registerRoutes);



app.listen(process.env.PORT, process.env.IP, function(){
   console.log(`Wayne's server started.....`);
});

My connection.js

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

const connection = mysql.createConnection({
  host: DATABASE_LOCATION,
  user: DATABASE_USER,
  database: DATABASE_NAME,
  password: DATABASE_PASSWORD,
  multipleStatements: true //for more than one query in a get route
});

module.exports = connection;

Я попытался развернуть на другой хост, и вот, когда я смотрю журналы, в которых говорится, что он работает на порту3000 и не буду открывать домашнюю страницу.Я знаю, что он еще не подключится к базе данных, я просто хочу, чтобы приложение запустилось первым.

Я действительно не могу понять, что я сделал неправильно.Но я подозреваю, что сделал что-то не так при создании переменных среды в моей консоли.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

На наших серверах есть 2 способа развертывания приложения NodeJS.


Первый действительно использует наш селектор NodeJS, как предложено @ Alpe89.

Служба селектора предназначена для клиентов, использующих несколько приложений NodeJS в разных версиях NodeJS.Селектор работает в сочетании с Apache Mod Passenger и создает виртуальную среду для каждого развертываемого приложения.

Это означает, что для каждого приложения вы можете иметь разные переменные среды или даже одни и те же переменные среды, но с разными значениями для них.

Чтобы фактически настроить переменную среды для приложения, созданного с помощью селектора NodeJS, вы должны использовать включенную в селектор функциональность, называемую так же:

https://www.screencast.com/t/uh4dVAo1VM2J


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

Это позволит вам напрямую устанавливать переменные окружения, используя SSH, с помощью следующей команды:

export SOME_ENV_VAR="Some value"

Также вы можете установить переменные окружения непосредственно в объекте env, используя следующий код в вашем Javascriptfiles:

process.env.PORT= 3001;

Однако запуск приложения со службой NodeJS по умолчанию означает, что вы должны запустить приложение из SSH.Это мы подробно описали здесь:

https://www.fastcomet.com/tutorials/nodejs/pm2


В заключение, независимо от того, какой подход вы будете использовать, определение порта на самом деле является правильным и неправильным.Причина заключается исключительно в том, как работает виртуальный хостинг для NodeJS.Размещение нескольких клиентских приложений на одном сервере означает, что каждое приложение должно работать на разных портах.Функция селектора NodeJS фактически предоставляет переменную PORT, если она не определена, и делает это таким образом, чтобы приложения 2 клиентов не могли работать на одном и том же порту.Поэтому, если вы решите установить порт вручную, вы можете столкнуться с проблемой поиска свободного порта, в зависимости от того, на каком сервере размещена ваша учетная запись.

0 голосов
/ 08 октября 2018

Я, должно быть, сделал что-то не так.Я создал новую папку для приложения.Затем я скопировал все файлы, а затем сделал новый git init и npm init.Затем я установил и развернул npm, и все работает нормально.Почему я не могу сказать, но это сработало.

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