Я написал небольшой фронт-проект с Vue.js, а Express был принят в бэк-энде.Front-end и back-end были в двух разных каталогах соответственно.API работает в моей локальной среде, но когда я развернул свой серверный интерфейс API в Heroku и попробовал GET-запрос Почтальона, он не работает.
В моем index.js
:
Это порт прослушивания: const port = process.env.PORT || 5000;
Я использую mongoose для подключения mLab: const db = require("./config/keys").mongoURI;
mongoose.connect(db)
И мой package.json
здесь:
{
"name": "backend-api",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start": "node index.js",
"server": "nodemon index.js"
},
"author": "Yeoman_Li",
"license": "ISC",
"devDependencies": {
"body-parser": "^1.18.3",
"express": "^4.16.4",
"mongoose": "^5.4.0"
}
}
Мой index.js
находится здесь:
const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const app = express();
// CORS
app.all("*", (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS");
res.header(
"Access-Control-Allow-Headers",
"Content-type, Accept, X-Access-Token, X-Key"
);
if ("OPTIONS" == req.method) res.status(200).end();
else next();
});
const mediaReq = require("./routes/api/mediaReq");
// DB
const db = require("./config/keys").mongoURI;
// body-parser
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// connect to DB
mongoose
.connect(db)
.then(() => console.log("MonogoDB Connected"))
.catch(err => console.log(err));
// router
app.use("/api/mediaReq", mediaReq);
// port
const port = process.env.PORT || 5000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
А вот мой маршрутизатор API:
const express = require("express");
const router = express.Router();
const mediaController = require("../../controllers/media");
// test
router.get("/test", (req, res) => {
res.json({ msg: "test works" });
});
// $route GET api/mediaReq/medias || /medias/:id
router.get("/medias", mediaController.allMedia);
router.get("/medias/:id", mediaController.byId);
router.post("/medias", mediaController.create);
router.delete("/medias/:id", mediaController.remove);
module.exports = router;
Я использовал почтальон для отправки простого запроса GET иэто работает: http://localhost:5000/api/mediaReq/medias
Но когда я попытался отправить запрос GET на свой серверный интерфейс heroku, он не работает: https://fast-reaches-23458.herokuapp.com/api/mediaReq/medias