我正在嘗試為注冊創建一個登錄頁面,也有同樣的錯誤。當我路由它的節目時
,**無法獲取/api/auth/register ]*。我已經檢查了所有可能的問題答案。我的服務器路由有問題。我的路線有問題嗎?或在瀏覽器視窗中編碼問題。
索引.js
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const dotenv = require("dotenv");
const helmet = require("helmet");
const morgan = require("morgan");
const userRoute = require("./routes/users");
const authRoute = require("./routes/auth");
const postRoute = require("./routes/posts");
dotenv.config();
mongoose.connect(
process.env.MONGO_URL,
{ useNewUrlParser: true,
useUnifiedTopology: true
},
() => {
console.log("Connected to MongoDB");
}
);
//middleware
app.use(express.json());
app.use(helmet());
app.use(morgan("common"));
app.use("/api/auth", authRoute);
app.use("/api/users", userRoute);
app.use("/api/posts", postRoute);
app.listen(8000, () => {
console.log("Backend server is running!");
});
我的 auth.js 存在登錄和注冊。
const express = require("express");
const router = express.Router();
const User = require("../models/User");
const bcrypt = require("bcrypt");
//REGISTER
router.post("/register", async (req, res) => {
try {
//generate new password
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(req.body.password, salt);
//create new user
const newUser = new User({
username: req.body.username,
email: req.body.email,
password: hashedPassword,
});
//save user and respond
const user = await newUser.save();
res.status(200).json(user);
} catch (err) {
res.status(500).json(err)
}
});
//LOGIN
router.post("/login", async (req, res) => {
try {
const user = await User.findOne({ email: req.body.email });
!user && res.status(404).json("user not found");
const validPassword = await bcrypt.compare(req.body.password, user.password)
!validPassword && res.status(400).json("wrong password")
res.status(200).json(user)
} catch (err) {
res.status(500).json(err)
}
});
module.exports = router;
uj5u.com熱心網友回復:
用于登錄的路由器使用POSTMethod,如果你直接在瀏覽器中輸入URL,你是在GET向服務器發送請求,你可能需要下載一個Postman才能發送Post帶有body的請求。
uj5u.com熱心網友回復:
你直接從瀏覽器發送 get 請求,你可以使用curl或postman。
除了@honghai 的回答,你不能發送這樣的回復:
!user && res.status(404).json("user not found");
您需要進行這些更改。
router.post("/login", async (req, res) => {
try {
const user = await User.findOne({ email: req.body.email });
// make sure user is not empty {} or [];
if (!user) res.status(404).json("user not found");
const validPassword = await bcrypt.compare(req.body.password, user.password)
// make sure password is not empty {} or [];
if(!validPassword) res.status(400).json("wrong password");
res.status(200).json(user)
} catch (err) {
res.status(500).json(err)
}
});
注意:您可以使用thunderclient,一個lighy重量庫測驗的API,我建議使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/392301.html
