Развертывание NodeJS на Heroku без Express / node_modules - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь развернуть NodeJS API в Heroku без каких-либо зависимостей, особенно без Express.

Он работает, как и ожидалось, на localhost, но на Heroku он не работает как на HTTP, так и на HTTPS-запросах., предоставив мне страницу ошибки приложения по умолчанию при создании запроса.

Я получаю эту ошибку, которая ничего не говорит мне о том, что на самом деле произошло: heroku logs --tail

heroku[router]: at=error code=H13 desc="Connection closed without response" 
method=GET path="/usuarios?id=0" host=simple-rest-nodejs.herokuapp.com 
request_id=29f65d75-6594-44f8-8f9d-6be025cd6ed6 fwd="179.223.167.29" dyno=web.1 
connect=0ms service=1ms status=503 bytes=0 protocol=https

Живая версияURL: https://simple -rest-nodejs.herokuapp.com

код index.js: (фактически весь код API)

const handlers = {};
const fs = require('fs');
const url = require('url');
const http = require('http');
const https = require('https');

handlers.status = function(data, callback) {
  callback(202, {status: true});
};

handlers._usuarios = {};
handlers.usuarios = function(data, callback) {
  fs.readFile('./libs/usuarios.json', 'utf8', function(err, usuarios) {
    if (err) {
      throw new Error(err);
    } else {
      const metodos = ['get'];
      if(metodos.indexOf(data.method) > -1){
        handlers._usuarios[data.method](usuarios, data, callback);
      } else {
        callback(405, {error: 405, message: "Método não permitido"});
      }
    }
  });
};

handlers._usuarios.get = function(usuarios, data, callback) {
  const array = JSON.parse(usuarios);
  const id = typeof(data.queryParams.id) == 'string' ? data.queryParams.id : false;

  if (id) {
    callback(202, array.filter(function(usuario) {
      return usuario.id.toString() === id;
    }));    
  } else {
    callback(202, array);
  }
}

handlers.notFound = function(data, callback) {
    callback(404, {error: 404});
};

const router = {
  '': handlers.status,
    'usuarios': handlers.usuarios,
};
/* REMOVE THE COMMENT TO RUN THIS ON LOCALHOST
const httpServer = http.createServer(function(req, res) {
    server(req, res);
}).listen(process.env.PORT || 5000);
*/
httpsServerOptions = {
    'key': fs.readFileSync('./https/key.pem'),
    'cert': fs.readFileSync('./https/cert.pem')
};
const httpsServer = https.createServer(httpsServerOptions, function(req, res) {
    server(req, res);
}).listen(process.env.PORT || 6000);

const server = function(req, res) {
  const parsedUrl = url.parse(req.url, true);
  const path = parsedUrl.pathname;
  const trimmedPath = path.replace(/^\/+|\/+$/g, '');
  const data = {
    queryParams: parsedUrl.query,
    method: req.method.toLowerCase()
  };

  const chosenHandler = typeof(router[trimmedPath]) !== 'undefined' ? router[trimmedPath] : handlers.notFound;
  chosenHandler(data, function(statusCode, payload) {
    res.writeHead(statusCode, {'Content-Type': 'application/json'});
    res.write(JSON.stringify(payload));
    res.end();
  });
}

Зависимости не установлено, папка node_modules отсутствует.Файл package.json в основном устанавливает метаданные проекта и сценарий запуска для NodeJS.

package.json:

{
  "name": "simple-rest",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "keywords": [
    "nodejs",
    "javascript",
    "js"
  ],
  "author": "",
  "license": ""
}

Спасибо.

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