繁体   English   中英

在显示错误处理的错误消息后,后端正在将数据提交到数据库。 [节点+快递]

[英]Backend is submitting data to database after displaying error message from error handling. [Nodejs + Express]

我正在为我的后端使用 nodejs 和 express。 当我在 postman 中的 1 个必需的输入列上测试我的错误处理时,它显示了我想看到的正确的错误处理消息,但它正在将数据提交到我的数据库(mysql 工作台)。

它应该在显示错误消息后停止,而不是继续将数据发布到我的数据库中。 我的正则表达式正在检查此列“乘数”以查看输入值是否仅 = 1-100。

如果任何乘数是 1-100,则返回成功,否则如果乘数与我的正则表达式不匹配,则返回 400 消息:“仅从 1 到 100 的数字”,否则返回 res.status(500).send({ 消息:“内部服务器错误” });

另外,如果可能,我可以将自定义正则表达式添加到 eventName、eventDesc 等的其他输入值吗? 如果是,我应该如何修改代码?

提前谢谢你,这是我的代码。

const express = require("express");
const router = express.Router();

router.post("/submitEvent", (req, res, next) => {
    
  var {eventName,topicId,eventDesc,multiplierType,multiplier,eventStart,eventEnd,status} = req.body;

  var pattern = /(^[1-9][0-9]?$|^100$)/; //regular expression allow number from 1 to 100 only

  eventsDB.createEvent(eventName,topicId,eventDesc,multiplierType,multiplier,eventStart,eventEnd,status, (err, results) => {

    if (err) {
      return res.status(500).send({ message: "Internal Server Error" });
    }
    else if (pattern.test(multiplier) === false) {
      return res.status(400).send({ message: "Number from 1 to 100 only" });
    } 
    else if (pattern.test(multiplier) === true) {
      return res.status(200).send({ message: "Success" });
    }
    // return res.status(200).json(results);

    }
  );
}
);

module.exports = router;

const db = require('../config/databaseConfig');
const eventsDB = {};

eventsDB.createEvent = (eventName, topicId, eventDesc, multiplierType, multiplier, eventStart, eventEnd, stat, callback) => {
    var dbConn = db.getConnection();

    dbConn.connect(function (err) {
        if (err) {
            return callback(err, null); 
        }

        const query = "INSERT INTO practiceme.events (eventName, topicId, eventDesc, multiplierType, multiplier, eventStart, eventEnd, status) values (?,?,?,?,?,?,?,?)";
        dbConn.query(query, [eventName, topicId, eventDesc, multiplierType, multiplier, eventStart, eventEnd, stat], (err, results) => {
            dbConn.end();
            if (err) {
                console.log(err);
                return callback(err, null);
            } else {
                return callback(null, results);
            }
        });
    });
    // return callback(null, true);
};

module.exports = eventsDB;

当您验证multiplier时,您已经在数据库中插入了一条记录。 在调用eventsDB.createEvent()之前进行检查

const pattern = /(^[1-9][0-9]?$|^100$)/; //regular expression allow number from 1 to 100 only

router.post("/submitEvent", (req, res, next) => {
  const {
    eventName,
    topicId,
    eventDesc,
    multiplierType,
    multiplier,
    eventStart,
    eventEnd,
    status,
  } = req.body;

  if (!pattern.test(multiplier)) {
    return res.status(400).send({ message: "Number from 1 to 100 only" });
  }

  eventsDB.createEvent(
    eventName,
    topicId,
    eventDesc,
    multiplierType,
    multiplier,
    eventStart,
    eventEnd,
    status,
    (err, results) => {
      if (err) {
        return res.status(500).send({ message: "Internal Server Error" });
      }

      return res.status(200).send({ message: "Success" });
    }
  );
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM