我使用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
安装。
答案 0 :(得分:1)
默认情况下,Heroku removes devDependencies
before deploying your application。如果您需要生产某些东西,它可能属于您的dependencies
,而不是devDependencies
。
但是您可能不应该在生产中使用nodemon
。这是一个开发工具。
例如,考虑将start
脚本更改为使用node
而不是nodemon
,例如
"start": "node ./server/server.js"
如果要编辑文件,可以添加dev
脚本以使用nodemon
。这样,您可以在本地计算机上使用npm run dev
或yarn dev
来保留旧的行为。