投掷错误不能在邮递员中发布 /api /password-reset
即时消息,当用户单击忘记密码以重置电子邮件时,我会尝试发送邮件。但是我会遇到此错误。对于 /用户(例如 /用户)的其他帖子请求, /符合其工作正常。但是对于密码收集,请求其给予无法在Postman中发布错误。 index.js文件
import express from "express";
import cors from "cors";
import mongoose from "mongoose";
import bodyParser from "body-parser";
import dotenv from "dotenv";
dotenv.config();
import userRoutes from "./routers/users.js";
import authRoutes from "./routers/auth.js";
import resetPasswordRoutes from "./routers/passwordReset.js";
const app = express();
// middlewares
app.use(express.json());
app.use(bodyParser.json({ extended: true }));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors());
// routes
app.use("/api/users", userRoutes);
app.use("/api/auth", authRoutes);
app.use("api/password-reset", resetPasswordRoutes);
const PORT = process.env.PORT || 5000;
const URL = process.env.URL;
console.log(process.env.BASE_URL);
//connect to mongodb atlas
mongoose
.connect(URL, {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => {
console.log("Connected to mongoDB Atlas successfully");
app.listen(PORT, () =>
console.log("Server is listening on the port " + PORT)
);
})
.catch((err) => console.log(err.message));
路由器/passwordReset.js
import express from "express";
import { passwordReset } from "../controllers/passwordReset.js";
import { passwordResetRequest } from "../controllers/passwordReset.js";
const router = express.Router();
router.post("/", passwordReset);
router.post("/:userId/:token", passwordResetRequest);
export default router;
控制器/passwordReset.js
import User from "../models/user.js";
import Token from "../models/token.js";
import sendMail from "../utils/sendEmail.js";
import Joi from "joi";
import crypto from "crypto";
import dotenv from 'dotenv';
dotenv.config();
export const passwordReset = async (req, res) => {
console.log(req.body);
try {
console.log(req.body);
const schema = Joi.object({
email: Joi.string().email().required(),
});
const { error } = schema.validate(req.body);
console.log(req.body);
if (error) return res.status(400).send({message: error.details[0].message});
const user = await User.findOne({ email: req.body.email });
if (!user)
return res.status(400).send({message: "user with given email doesn't exist"});
let token = await Token.findOne({ userId: user._id });
if (!token) {
token = await new Token({
userId: user._id,
token: crypto.randomBytes(32).toString("hex"),
}).save();
}
const link = `${process.env.BASE_URL}/password-reset/${user._id}/${token.token}`;
await sendMail(user.email, "password reset", link);
res.send({message:"password reset link has sent to your email account."});
} catch (err) {
res.send({message:"An error occurred"});
console.log(err);
}
};
export const passwordResetRequest = async (req, res) => {
try {
const schema = Joi.object({ password: Joi.string().required() });
const { error } = schema.validate(req.body);
if (error) return res.status(400).send(error.details[0].message);
const user = await User.findById(req.params.userId);
if (!user) return res.status(400).send("Invalid link or expired");
const token = await Token.findOne({
userId: user._id,
token: req.params.token,
});
if (!token) return res.status(400).send("Invalid link or expire");
user.password = req.body.password;
await user.save();
await token.delete();
res.send("password reset successfull");
} catch (err) {
res.send("An error occured");
console.log(err);
}
};
Postman请求发送URL -http:// localHost:5000/api/password -reset Postman中的错误 - 无法发布 /API /密码 - 未找到404 任何人都帮助我解决这个错误
Im trying to send mail when user clicks on forgot password to reset the email.But im getting this error. for other post requests like /users, /auth its working fine. But for password-reset post request its giving CANNOT POST error in postman.
index.js file
import express from "express";
import cors from "cors";
import mongoose from "mongoose";
import bodyParser from "body-parser";
import dotenv from "dotenv";
dotenv.config();
import userRoutes from "./routers/users.js";
import authRoutes from "./routers/auth.js";
import resetPasswordRoutes from "./routers/passwordReset.js";
const app = express();
// middlewares
app.use(express.json());
app.use(bodyParser.json({ extended: true }));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors());
// routes
app.use("/api/users", userRoutes);
app.use("/api/auth", authRoutes);
app.use("api/password-reset", resetPasswordRoutes);
const PORT = process.env.PORT || 5000;
const URL = process.env.URL;
console.log(process.env.BASE_URL);
//connect to mongodb atlas
mongoose
.connect(URL, {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => {
console.log("Connected to mongoDB Atlas successfully");
app.listen(PORT, () =>
console.log("Server is listening on the port " + PORT)
);
})
.catch((err) => console.log(err.message));
router/passwordReset.js
import express from "express";
import { passwordReset } from "../controllers/passwordReset.js";
import { passwordResetRequest } from "../controllers/passwordReset.js";
const router = express.Router();
router.post("/", passwordReset);
router.post("/:userId/:token", passwordResetRequest);
export default router;
controllers/passwordReset.js
import User from "../models/user.js";
import Token from "../models/token.js";
import sendMail from "../utils/sendEmail.js";
import Joi from "joi";
import crypto from "crypto";
import dotenv from 'dotenv';
dotenv.config();
export const passwordReset = async (req, res) => {
console.log(req.body);
try {
console.log(req.body);
const schema = Joi.object({
email: Joi.string().email().required(),
});
const { error } = schema.validate(req.body);
console.log(req.body);
if (error) return res.status(400).send({message: error.details[0].message});
const user = await User.findOne({ email: req.body.email });
if (!user)
return res.status(400).send({message: "user with given email doesn't exist"});
let token = await Token.findOne({ userId: user._id });
if (!token) {
token = await new Token({
userId: user._id,
token: crypto.randomBytes(32).toString("hex"),
}).save();
}
const link = `${process.env.BASE_URL}/password-reset/${user._id}/${token.token}`;
await sendMail(user.email, "password reset", link);
res.send({message:"password reset link has sent to your email account."});
} catch (err) {
res.send({message:"An error occurred"});
console.log(err);
}
};
export const passwordResetRequest = async (req, res) => {
try {
const schema = Joi.object({ password: Joi.string().required() });
const { error } = schema.validate(req.body);
if (error) return res.status(400).send(error.details[0].message);
const user = await User.findById(req.params.userId);
if (!user) return res.status(400).send("Invalid link or expired");
const token = await Token.findOne({
userId: user._id,
token: req.params.token,
});
if (!token) return res.status(400).send("Invalid link or expire");
user.password = req.body.password;
await user.save();
await token.delete();
res.send("password reset successfull");
} catch (err) {
res.send("An error occured");
console.log(err);
}
};
postman request sending url - http://localhost:5000/api/password-reset
ERROR in postman - Cannot POST /api/password-reset, 404Not Found
Anyone help me with this error
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我相信这是您的路线字符串中的错别字。 '/' 丢失的。
app.use(“ api/password-reset”,resetPasswordRoutes);
应该是
app.use(“/api/passwand-reset”,resetPasswordRoutes);
>I believe it's a typo in your route string. '/' missing.
app.use("api/password-reset", resetPasswordRoutes);
Should be
app.use("/api/password-reset", resetPasswordRoutes);