Нужна помощь в развертывании API RESTful, созданного с помощью MongoDB Atlas и Express - PullRequest
1 голос
/ 05 мая 2019

Я создал RESTful API с Express и MongoDB Atlas, и я пытаюсь развернуть его на Heroku, но по какой-то причине он не работает (работает на моем локальном хосте).

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

Вот мой server.js:

const express = require("express");
const app = express();
const appJs = require("./app");
const port = process.env.PORT || 3000



appJs.listen(port, function() {
  console.log("listening at " + port);
});

и мой App.js:


const express = require("express");
const app = express();
const morgan = require("morgan");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");

const jobRoutes = require("../api/routes/jobs");
const userRoutes = require("../api/routes/user");

mongoose.connect(
  `mongodb+srv://myname:${
    process.env.MONGO_ATLAS_PW
  }@cluster0-z4gre.mongodb.net/test?retryWrites=true`,
  {
    useNewUrlParser: true
  }
);

app.use("/uploads", express.static("uploads"));
app.use(morgan("dev"));

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use((req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept, Authorization"
  );
  if (req.method === "OPTIONS") {
    res.header("Access-Control-Allow-Methods", "PUT, POST, PATCH, DELETE, GET");
    return res.status(200).json({});
  }
  next();
});

Я выполнил все шаги для развертывания на Heroku, но при переходе к имени домена я получил сообщение об ошибке.

Мой API покоя в формате JSON и отлично работает в режиме разработки

Вот ошибка, которую я получаю при переходе по URL Heroku:

Ошибка приложения

В приложении произошла ошибка, и ваша страница не может быть обработана. Если вы являетесь владельцем приложения, проверьте подробности в своих журналах. Это можно сделать из интерфейса командной строки Heroku с помощью команды

heroku logs --tail

мои журналы, которые терпят неудачу:

2019-05-04T22:13:54.658480+00:00 heroku[web.1]: Process exited with status 1
2019-05-04T22:13:54.582531+00:00 app[web.1]:
2019-05-04T22:13:54.582551+00:00 app[web.1]: > cryptojobs@1.0.0 start /app
2019-05-04T22:13:54.582553+00:00 app[web.1]: > nodemon ./server/server.js --exec
2019-05-04T22:13:54.582554+00:00 app[web.1]:
2019-05-04T22:13:54.593393+00:00 app[web.1]: sh: 1: nodemon: not found
2019-05-04T22:13:54.598435+00:00 app[web.1]: npm ERR! file sh
2019-05-04T22:13:54.598644+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2019-05-04T22:13:54.598901+00:00 app[web.1]: npm ERR! errno ENOENT
2019-05-04T22:13:54.599158+00:00 app[web.1]: npm ERR! syscall spawn

nodemon устанавливается как devDependencies.

1 Ответ

1 голос
/ 05 мая 2019

По умолчанию Heroku удаляет devDependencies перед развертыванием приложения . Если вам нужно что-то в производстве, оно, вероятно, принадлежит вашему dependencies, а не devDependencies.

Но, вероятно, вам все равно не следует использовать nodemon в производстве. Это инструмент разработки.

Вместо этого рассмотрите возможность изменения сценария start для использования node вместо nodemon, например

"start": "node ./server/server.js"

Вы можете добавить сценарий dev для использования nodemon во время редактирования этого файла, если хотите. Таким образом, вы можете использовать npm run dev или yarn dev на локальном компьютере, чтобы сохранить прежнее поведение.

...