Экспресс приложение с MSSQL, созданное с CLI, не подключается правильно к базе - PullRequest
0 голосов
/ 28 декабря 2018

У меня проблема с приложением, созданным с помощью Express CLI.Важно отметить, что я использую mssql для подключения к базе данных.

Когда я использую npm start, приложение запускается без проблем, но когда я запускаю node ./bin/www, приложение запускается, но он не может подключиться к базе данных.Я получаю сообщение об ошибке "Invalid server: undefined".

Когда я проверяю свой файл package.json, у меня есть:

  "scripts": {
    "start": "node ./bin/www",
    "debug": "set DEBUG=myapp:* & npm start",
    "nodemon": "npx nodemon"
  },

Насколько я понимаю, это должно быть точно так же, какзапустить npm start, чем node ./bin/www, но по какой-то причине это не так.

Что касается того, почему это проблема, я хочу оставить приложение работающим, используя pm2, и поэтому мне нужновозможность запуска приложения из файла, а не из команды.

Это мой www файл:

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('mtloops-web-api:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort('3543');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

Это мой файл подключения к базе данных:

const sql = require('mssql')
// const path = require('path')
require('dotenv').config()

var config = {
  user: process.env.DBUSERNAME,
  password: process.env.DBPASSWORD,
  server: process.env.HOST,
  database: process.env.DATABASE,
  connectionTimeout: 300000,
  requestTimeout: 300000,
  pool: {
    idleTimeoutMillis: 300000,
    max: 100
  },
  options: {
    encrypt: false
  }
}

async function sp (procedure, params) {
  const toReturn = await new sql.ConnectionPool(config).connect().then(pool => {
    const request = pool.request()
    Object.keys(params).forEach(key => {
      if (isNaN(params[key])) {
        request.input(key, sql.VarChar(8), params[key])
      } else {
        var numeric = parseInt(params[key])
        request.input(key, sql.Int, numeric <= 0 ? -1 : numeric)
      }
    })
    return request.execute(procedure)
  }).catch(error => {
    throw error.message
  })
  return toReturn
}

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