簡體   English   中英

JSON POST 在 Node/Mongo 上請求空響應

[英]JSON POST requests empty response on Node/Mongo

編輯:我解決了。 這很簡單,我在為 body-parser 設置 app.use 之前已經導入了路由,所以它不知道解析 JSON 的熱度,因此返回了一個未定義的主體。

我正在嘗試按照教程制作 REST API。 我完全按照它所做的去做,並嘗試了我能想到的所有修復,但我無法使 JSON POST 請求工作。 發送請求后,我應該得到這樣的 JSON:

{
  "_id": "a13d1s2bc12as3a2",
  "name": "Name",
  "desc": "bla bla",
  "_v": 0
}

但相反,我只得到了一個空體的 201 資源。 甚至不是一個空的對象,只是什么都沒有。

  • 我在 Postman 和 HTTPie 中嘗試了所有可能的配置。
  • 我還嘗試了更改 body-parser 配置的建議修復程序,因為我知道在過去幾個月中某些內容被棄用或更改(json、urlencoded 等)
  • 我檢查 Mongoose 是否使用它用於檢查它的功能連接到數據庫(它是)。

我不知道問題出在哪里。

這是索引:

const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const meals = require("./routes/meals");
const orders = require("./routes/orders");
const app = express();

mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true });

app.use("/meals", meals);
app.use("/orders", orders);

app.use(express.json());
app.use(bodyParser.json({ type: 'application/json' }));

module.exports = app;

用餐路線:

const express = require("express");
const Meals = require("../models/Meals");

const router = express.Router();

router.get("/", (req, res) => {
    Meals.find()
    .exec()
    .then(x => res.status(200).send(x));
});

router.get("/:id", (req, res) => {
    Meals.findById(req.params.id)
    .exec()
    .then(x => res.status(200).send(x));

router.post("/", (req, res) => {
    Meals.create(req.body)
    .then(x => res.status(201).send(x));
});

router.put("/:id", (req, res) => {
    Meals.findOneAndUpdate(req.params.id, req.body)
    .then(x => res.sendStatus(204));
});

router.delete("/:id", (req, res) => {
    Meals.findOneAndDelete(req.params.id)
    .exec()
    .then(() => res.sendStatus(204));
});

module.exports = router;

和模型:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const Meals = mongoose.model("Meal", new Schema({
    name: String,
    desc: String
 }));

 module.exports = Meals;

謝謝你。

調試試試這個

const handleError = function() {
    console.error(err);
    // handle your error
};

router.post("/", (req, res) => {

  Meals.create(req.body, function (err, req.body) {
    if (err) return handleError(err);
  })

});

您也可以嘗試只提供靜態數據進行測試,看看是否有效,例如:

const meal = new Meals({ name: 'some meal',desc: 'some desc' });
meal.save(function (err) {
  if (err) return handleError(err);
  // saved! return 200 or whatever you needs to do here
});

我解決了。 這很簡單,我在為 body-parser 設置 app.use 之前已經導入了路由,所以它不知道解析 JSON 的熱度,因此返回了一個未定義的主體。

app.use(bodyParser.json());

app.use("/meals", meals);
app.use("/orders", orders);

module.exports = app;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM