当前位置: 首页 > 知识库问答 >
问题:

投掷错误无法在邮递员中 /api/password-reset

帅彦
2023-03-14

当用户单击忘记密码以重置电子邮件时,我试图发送邮件。但我得到了这个错误。对于 /users等其他帖子请求, /auth其正常工作。但对于密码重置帖子请求,它在邮递员中给出了不能发布错误。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));

路由器/密码Reset.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;

控制器/密码Reset.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);
    }
};

邮递员请求发送url-http://localhost:5000/api/password-邮递员重置错误-无法发布/api/密码重置,404找不到任何人帮助我解决此错误

共有1个答案

井宪
2023-03-14

我认为这是你的路线字符串中的一个拼写错误丢失的

app.use("api/word-resetPasswordRoutes", resetPasswordRoutes);

应该是

<代码>应用程序。使用(“/api/密码重置”,resetPasswordRoutes)

 类似资料:
  • 我正在用python运行下面的代码 我每次都会遇到下面的错误-有人能帮忙吗! OpenCV错误:未指定的错误(该函数未实现。使用Windows、GTK 2.x或Carbon支持重建库。如果您在Ubuntu或Debian上,请安装libgtk2.0-dev和pkg config,然后重新运行cmake或configure脚本),位于cvShowImage、file/Users/travis/buil

  • 问题内容: 我正在使用邮递员与elasticsearch服务器进行通信,当我尝试与我的elasticsearch服务器连接时,我在邮递员中收到错误消息。我哪里出问题了?这是我的代码。 我已尝试与服务器通信,但我一直收到此错误 问题答案: 好像您使用的是Elasticsearch 7.0版。由于Elasticsearch每个索引不再支持一种以上的映射类型,因此不再需要映射名称,并且此版本中不应提供该

  • 我有一个非常基本的webApi构建/运行(相当模板应用程序,仅此而已),以便遵循一个培训视频。GET和DELETE调用工作正常,PUT和POST给出400错误。诚然,对所有这些都很新,所以我正在寻找一些基本的方向,关于如何排除故障。相关的屏幕截图如下,我很高兴提供其他要求。提前谢了。

  • 我正在尝试使用Postman访问API,以使用基本身份验证获取响应,但当我提交数据时,它会给我带来可怕的400错误,这显然表明某些标头设置不正确。 以下是API信息: 作为回应,我应该得到一个JSON形式的加密令牌,而不是得到这个错误。 以下是邮差截图: 我错过了什么吗?

  • 我正试着在邮递员上打API。API正在服务器上工作,但我没有收到任何数据。以下是视觉图像: 它是回应我与“没有数据”和400错误的要求。