node.js - 我的请求正文在节点 API 中显示为空或未定义
问题描述
这是我用来验证我的登录的 API,但它没有收到正确的请求正文。
这是我与 MongoCloud 连接的服务器/索引文件。
const express = require("express");
const mongoose = require("mongoose");
const users = require("./routes/api/users");
const profile = require("./routes/api/profile");
const posts = require("./routes/api/posts");
const app = express();
const bodyParser = require("body-parser");
// DB Config
const db = require("./config/keys").mongoURI;
// Connect Mongo
mongoose
.connect(db, { useNewUrlParser: true })
.then(() => console.log("Mongo is connected"))
.catch(err => console.log(err));
// var MongoClient = require("mongodb").MongoClient;
//Enabling body parser
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.get("/", (req, res) => res.send("Hello!"));
app.use("/api/users", users);
app.use("/api/posts", posts);
app.use("/api/profile", profile);
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 gravatar = require("gravatar");
const bcrypt = require("bcryptjs");
const User = require("../../models/User");
// @Route GET api/users/test
// desc test users route
// access public
router.get("/test", (req, res) => res.json({ msg: "users works" }));
// @Route POST api/users/register
// desc register a user
// access public
router.post("/register", (req, res) => {
User.findOne({ email: req.body.email }).then(user => {
if (user) {
return res.status(400).json({ email: "email already exists" });
} else {
const avatar = gravatar.url(req.body.email, {
s: "200", //size
r: "pg", //rating
d: "mm" //default
});
const newUser = new User({
name: req.body.name,
email: req.body.email,
avatar,
password: req.body.password
});
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) throw err;
newUser.password = hash;
newUser
.save()
.then(user => res.json(user))
.catch(err => console.log(err));
});
});
}
});
});
// @Route POST api/users/login
// desc Login User/Returning JWT(json web token)
// access public
router.post("/login", (req, res) => {
const email = req.body.email;
const password = req.body.password;
//Find user by email
User.findOne({ email }).then(user => {
if (!user) {
return res.status(404).json({ email: "user not found" });
} else {
//Check Password
bcrypt.compare(password, user.password).then(isMatch => {
if (isMatch) {
res.json({ msg: "Success" });
} else {
return res.status(400).json({ password: "Incorrect Password" });
}
});
}
});
});
module.exports = router;
我正在编写一种类似的 API 来注册我的用户,它工作得很好。
解决方案
我认为您需要导出路由文件,并在 index.js 中使用它,如下所示。
index.js
const express = require("express");
const app = express();
const authRoute = require("./authRoute");
app.use(express.json());
app.use("/auth", authRoute);
const port = process.env.PORT || 3000;
app.listen(port, () => console.log("Listening"));
还有你的路由文件,我叫 authRoute.js。
const express = require("express");
const router = express.Router();
router.post("/login", async (req, res) => {
console.log(req.body);
res.send(req.body);
});
module.exports = router;
req.body
有了这些,如果您向端点 /auth/login 发送发布请求,您必须能够阅读。例如,如果使用 localhost:3000:
http://localhost:3000/auth/login
推荐阅读
- flask - 在 Unix 上维护 Gunicorn 和 flask
- android - 如何为列表中的列表创建 RecyclerView 适配器
- ios - Apple 钱包 pkpass 收到太多更新
- python - 我不知道为什么表单没有出现在我的页面上
- python - Selenium Chrome 驱动程序无法在 Pi Zero 上运行,错误代码为 -4
- prismjs - 如何在 CodeFlask 中添加已经支持的语言
- angular6 - 以本地格式显示日期、数字、百分比和货币
- php - 从 WooCommerce 中的产品中检索库存数量的函数
- javascript - 不断尝试“获取”api。如果由于网络错误而失败
- assembly - x86 程序集 - 编码相对 jmp