投掷错误不能在邮递员中发布 /api /password-reset

发布于 2025-02-08 03:40:00 字数 4049 浏览 0 评论 0原文

即时消息,当用户单击忘记密码以重置电子邮件时,我会尝试发送邮件。但是我会遇到此错误。对于 /用户(例如 /用户)的其他帖子请求, /符合其工作正常。但是对于密码收集,请求其给予无法在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

櫻之舞 2025-02-15 03:40:00

我相信这是您的路线字符串中的错别字。 '/' 丢失的。

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);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文