nodejs res.status().send() 未返回正确的状态代码

问题描述 投票:0回答:1

在我的 Nodejs 项目中,控制器方法未将状态正确发送回客户端。

用户.controller.js

const User = require('../models/user');
const logger = require('../logger');
const UserOperations = require('../models/user.operations');

module.exports = {
    autenticateUser: async (req, res, next) => {
        const data = {};
        if (!req.body) {
            const err_msg = "Request body not present";
            logger.error(err_msg);
            res.status(422).send(err_msg);
            return;
        }
        if (req.body.username) {
            data.username = req.body.username.trim();
        } else {
            const err_msg = "Username not found in the request body";
            logger.error(err_msg);
            res.status(422).send(err_msg);
            return;
        }
        if (req.body.user_password) {
            data.user_password = req.body.user_password.trim();
        } else {
            const err_msg = "Password not found in the request body";
            logger.error(err_msg);
            res.status(422).send(err_msg);
            return;
        }

        try {
            const userData = await UserOperations.validateCredentials(data);
            res.status(200).json(userData);
        } catch (error) {
            const err_msg = "" + error;
            logger.error(err_msg);
            res.status(400).send(err_msg);
        }
    },
};

用户.route.js

const express = require('express');

const userController = require('../controllers/user.controller');
const userRouter = express.Router();

userRouter.post('/login', userController.autenticateUser);
userRouter.post('/create', userController.createUser);
userRouter.post('/edit', userController.editUser);
userRouter.delete('/delete', userController.deleteUser);
userRouter.get('/findbyusername', userController.findByUsername);
userRouter.get('/findbyemail', userController.findByEmail);
userRouter.get('/findbymobile', userController.findByMobile);
userRouter.get('/findall', userController.findAllUsers);
userRouter.get('/findbypk', userController.findByUserId);

module.exports = userRouter;

服务器.js

const express = require('express');

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

function normalizePort(val) {
    var port = parseInt(val, 10);
    if (isNaN(port)) {
        return val;
    }
    if (port >= 0) {
        return port;
    }
    return false;
}

// Referring models
const my_db = require('./models/database');
const User = require('./models/user');
const Customer = require('./models/client');
const Project = require('./models/project');
const Assignment = require('./models/assignment');
const Communication = require('./models/communication');

// Referring routes and controllers
const userRouter = require('./routes/user.route');
const clientRouter = require('./routes/client.route');
const projectRouter = require('./routes/project.route');
const assignmentRouter = require('./routes/assignment.route');
const communicationRouter = require('./routes/communication.route');
const errorController = require('./controllers/error.controller');

app.use('/user', userRouter);
app.use('/client', clientRouter);
app.use('/project', projectRouter);
app.use('/assignment', assignmentRouter);
app.use('/communication', communicationRouter);
app.use(errorController.getErrorPage);

const port = normalizePort(process.env.APP_PORT || '5000');

my_db
    .sync({ force: false })
    .then(result => {
        app.listen(port, console.log("Server listening on port: " + port));
    })
    .catch(err => {
        console.log(err);
    });

当从邮递员执行 /user/login 时,我在日志中收到了正确的错误消息

2024 年 4 月 30 日 08:11:03.555 [错误] - 找不到用户名为 admin1 的用户

邮递员中的响应正文也正确到达。

{
    "error_msg": "No user found with username admin1"
}

但它附带了状态:200 OK,但在代码中我发送了状态400。

node.js express
1个回答
0
投票

问题所在:

const userData = await UserOperations.validateCredentials(data);

函数

validateCredidentials()
应该是
throw new Error("No user found with username admin1")
,而不是
return "No user found with username admin1"

这会将您的程序带入

catch
语句中。

可选解决方案:

您也可以尝试修改您的代码,但请注意,我们不知道您的

validateCredentials()
函数是什么样的:

try {
  const userData = await UserOperations.validateCredentials(data);
  if(userData.err_msg) {
    res.status(400).send(err_msg);
  }
  else {
  res.status(200).json(userData);
  }
} catch (error) {
  res.status(500).send(error.message);
}
© www.soinside.com 2019 - 2024. All rights reserved.