需要帮助来部署使用MongoDB Atlas和Express创建的RESTful API

时间:2019-05-04 22:55:44

标签: node.js express heroku deployment mongodb-atlas

我使用Express和MongoDB Atlas创建了RESTful API,我正尝试将其部署在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上部署的所有步骤,但是转到域名时收到错误消息。

我的Restful API为JSON格式,并且在开发模式下可以完美运行

这是我进入Heroku URL时遇到的错误:

  

应用程序错误

     

应用程序中发生错误,无法提供您的页面。如果您是应用程序所有者,请检查日志以获取详细信息。您可以使用以下命令从Heroku CLI中进行操作

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 个答案:

答案 0 :(得分:1)

默认情况下,Heroku removes devDependencies before deploying your application。如果您需要生产某些东西,它可能属于您的dependencies,而不是devDependencies

但是您可能不应该在生产中使用nodemon。这是一个开发工具。

例如,考虑将start脚本更改为使用node而不是nodemon,例如

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

如果要编辑文件,可以添加dev脚本以使用nodemon。这样,您可以在本地计算机上使用npm run devyarn dev来保留旧的行为。