首页 > 解决方案 > 使用邮递员测试 api。但请求正在返回用户名或电子邮件无效

问题描述

我从我的 nodejs 后端服务器创建了一个用户登录路由,我想测试 api,但它返回给我一个错误,尽管这是我输入的错误,以防代码无法按预期工作。但是我一遍又一遍地交叉检查代码,我似乎无法从代码中指出哪里有问题。请通过查看代码来帮助您可能做错了什么,这就是原因。

**userRouter path**

userRouter.post('/signin', expressAsyncHandler(async (req, res) => {
    const user = await User.findOne({ email: req.body.email });
    if(user) {
        if(bcrypt.compareSync(req.body.password, user.password)) {
            res.send({
                _id: user._id,
                name: user.name,
                email: user.email,
                isAdmin: user.isAdmin,
                token: generateToken(user),
            });
            return;
        }
    }
    res.status(401).send({ message: 'Invalid email or password verification' });
}))

export default userRouter;


  **User model path**

    import mongoose from 'mongoose';


const userSchema = new mongoose.Schema({
    name: { type: String, required: true },
    email: { type: String, required: true },
    password: { type: String, required: true },
    isAdmin: { type: Boolean, default: false, required: true },
    
},
{
    timestamps: true
}
);


const User = mongoose.model("User", userSchema);


export default User;



 **server.js path...**

    import express from 'express';
import mongoose from 'mongoose';
import dotenv from 'dotenv';
import productRouter from './routers/productRouter.js';
import userRouter from './routers/userRouter.js';

dotenv.config()


const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

mongoose.connect(process.env.MONGODB_URL || 'mongodb://localhost/e-commerce', {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
});


app.use('/api/users', userRouter);
app.use('/api/products', productRouter);

app.get('/', (req, res) => {
    res.send('Node server is Serve here');
});

const port = process.env.PORT || 5000;

app.use((err, req, res, next) => {
    res.status(500).send({ message: err.message });
});

app.listen(5000, () => {
    console.log(`serve at http://localhost/${port}`)
});

   **utils.js for generating jsonwebtoken**

   export const generateToken= (user) => {
    return jwt.signin({
        _id: user._id,
        name: user.name,
        email: user.email,
        isAdmin: user.isAdmin,
    }, process.env.JWT_SECRET,
        {
            expiresIn: '30d',
        }
    );
}

标签: node.jsreactjsmongodbmongoosepostman

解决方案


在 Express 中, res.send() 用于字符串和缓冲区对象。要发送 json 数据,您需要使用其他东西:而不是res.send(jsondata)使用res.json(jsondata)

文档:https ://www.geeksforgeeks.org/express-js-res-json-function/


推荐阅读