简体   繁体   English

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

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

I am using nodejs and express for my backend.我正在为我的后端使用 nodejs 和 express。 As I was testing my error handling on 1 of the required input column in postman, It displayed the correct error handling message that I want to see but It is submitting the data into my database (mysql workbench).当我在 postman 中的 1 个必需的输入列上测试我的错误处理时,它显示了我想看到的正确的错误处理消息,但它正在将数据提交到我的数据库(mysql 工作台)。

It should stopped after displaying the error message and not continue to post the data into my database.它应该在显示错误消息后停止,而不是继续将数据发布到我的数据库中。 My regex is checking for this column 'Multiplier' to see if the input value = 1-100 only.我的正则表达式正在检查此列“乘数”以查看输入值是否仅 = 1-100。

If any of the Multiplier is 1-100, return success, else if multiplier did not match with my regex return 400 message: "Number from 1 to 100 only" else return res.status(500).send({ message: "Internal Server Error" });如果任何乘数是 1-100,则返回成功,否则如果乘数与我的正则表达式不匹配,则返回 400 消息:“仅从 1 到 100 的数字”,否则返回 res.status(500).send({ 消息:“内部服务器错误” });

Also if possible, can I add custom regex to other input value for eventName, eventDesc etc?另外,如果可能,我可以将自定义正则表达式添加到 eventName、eventDesc 等的其他输入值吗? If yes, how should I modify the code to?如果是,我应该如何修改代码?

Thank you in advance, here is my code.提前谢谢你,这是我的代码。

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;

By the time you're validating multiplier , you've already inserted a record in your DB.当您验证multiplier时,您已经在数据库中插入了一条记录。 Do the check before calling eventsDB.createEvent()在调用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