使用邮递员测试 api。但请求正在返回用户名或电子邮件无效

Posted

技术标签:

【中文标题】使用邮递员测试 api。但请求正在返回用户名或电子邮件无效【英文标题】:Testing api using postman. But request is returning user name or email is invalid 【发布时间】:2021-10-10 21:32:02 【问题描述】:

我从我的 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',
        
    );

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我试试你的方法,但还是这样... "message": "jwt is not defined" 添加 import jwt from 'jsonwebtoken' @Ahmad Salihu 你还有问题吗?

以上是关于使用邮递员测试 api。但请求正在返回用户名或电子邮件无效的主要内容,如果未能解决你的问题,请参考以下文章

如何从 API 请求中检索错误消息 [重复]

尽管在邮递员中工作,但请求 JSON 在 JMeter 中给出错误

android 改造后注销请求给出错误 406 不可接受:用户未登录。...在邮递员 api 上工作正常

烧瓶根据邮递员的邮寄请求返回 400

请求用户电子邮件时返回 404 Not Found [ASP.NET Web API]

使用邮递员返回错误请求,但未在单元测试 Spring Boot 中返回