簡體   English   中英

Node.js POST 請求在 Postman 中永遠掛起

[英]Node.js POST request hangs forever in Postman

我已經按照教程設法建立了一個注冊系統,並且一直在嘗試獲取我自己的數據來發布我的 MongoDB,但是 Postman 請求永遠發送。 我不確定我是否遺漏了某些東西,或者我是否使用了錯誤的語法?

我只是想為我的“愛好”模型發布兩個字符串。

hobbies.js (api) 包含在 routes/api 中。

const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");

const Hobbies = require("../models/Hobby");

// @route   GET api/posts/test
// @desc    Tests post routes
// @access  Public - (Private routes are for registered and logged in users)
router.get("/test", (req, res) => res.json({ msg: "Hobbies page Works" }));

router.post("/newhobby", (req, res) => {
  //else create the new user in the DB using the data input by user
  const newHobby = new Hobbies({
    newhobby: req.body.newhobby,
    classes: req.body.classes
  });
});

//make router available elsewhere (from server.js in this case)
module.exports = router;

Hobby.js (model) 模型在我的 routes/models 文件夾中定義

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

//Create schemac
const HobbiesSchema = new Schema({
  newhobby: {
    type: String,
    required: true
  },
  classes: {
    type: String
  }
});

module.exports = Hobby = mongoose.model("hobbies", HobbiesSchema);

Server.js 處理我的服務器的配置

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

const users = require("./routes/api/users");
const profile = require("./routes/api/profile");
const posts = require("./routes/api/posts");
const donate = require("./routes/api/donate");
const hobby = require("./routes/api/hobbies");

const app = express();

// Body parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// DB  config
const db = require("./config/keys").mongoURI;

// Connect to DB through mongoose
mongoose
  .connect(db)
  .then(() => console.log("MongoDB Connected"))
  .catch(err => console.log(err));

//Passport middleware
app.use(passport.initialize());

//Passport config
require("./config/passport.js")(passport);

// Use routes
app.use("/api/users", users);
app.use("/api/profile", profile);
app.use("/api/posts", posts);
app.use("/api/donate", donate);
app.use("/api/hobbies", hobby);

const port = process.env.PORT || 5000;

app.listen(port, () => console.log("Server runnning on port", port));

郵差卡住郵遞員卡住 POST 請求

在這個帖子路線中:

router.post("/newhobby", (req, res) => {
  //else create the new user in the DB using the data input by user
  const newHobby = new Hobbies({
    newhobby: req.body.newhobby,
    classes: req.body.classes
  });
});

您不會向客戶端/瀏覽器發送任何響應。 因此,它坐在那里等待回應,但永遠不會到來。 我不知道你想要什么響應,但對於程序化請求,它可能只是簡單的事情:

res.json({response: "ok"});

或者

res.send("ok");

如果這是從瀏覽器發布的表單,那么您將需要發送回一個 HTML 頁面以在表單提交后顯示。

router.post("/newhobby", (req, res) => {
  //else create the new user in the DB using the data input by user
  const newHobby = new Hobbies({
    newhobby: req.body.newhobby,
    classes: req.body.classes
  });
  // do something here with newHobby

  // then send a response
  res.send("all done");
});

您無需對文檔進行任何操作,您需要先保存它,然后再將其發送給客戶端。

發生錯誤時將狀態設置為 500 並向客戶端發送錯誤消息

如果你不熟悉Promises.then和 . catch會讓你感到困惑,花點時間閱讀關於 promise 的鏈接

router.post("/newhobby", (req, res) => {
  const newHobby = new Hobbies({
    newhobby: req.body.newhobby,
    classes: req.body.classes
  })

  newHobby.save()
    .then(res.json)
    .catch(e => res.status(500).json({ message: e.message })
})

如果密碼在“<>”狀態內,請檢查“配置/密鑰”中的數據庫。 只需刪除它們並嘗試一下。

"mongodb+srv://user:<password>@cluster..."

"mongodb+srv://user:password@cluster..."

在 Atlas 集群中配置連接字符串時嘗試將 node.js 版本降級到 2.2.12,如下所示:

在此處輸入圖片說明

暫無
暫無

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

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