如果发生pg错误,express服务器将关闭

问题描述

我有一个附加到pg数据库的Express应用程序。我正在处理错误。我希望将pg错误消息发送到前端,以便用户知道为什么此表单未发送。现在,如果我向该端点发送违反数据库约束的信息,则会关闭服务器。

我认为这与我处理错误的方式有关,但是我是新来表达的人,对如何解决这个问题有些困惑。

这是我的代码快速路线:

app.post('/api/inBox',inBox.createInBox)

createInBox函数

 const createInBox = (request,response) => {
    const { name,email,body,tag,subject } = request.body
      console.log("request body",request.body)
        pool.query('INSERT INTO inBox (name,subject ) VALUES ($1,$2,$3,$4,$5)',[name,subject ],(error,results) => {
          if (error) {
            return console.error(err.message);
          }
          console.log("get to Success  contact")
          response.status(200).send(`InBox Added`)
        })
       
  }

解决方法

仅供参考,您的服务器可能正在关闭,因为您在err.message中引用了console.error(err.message),但是变量名是error,而不是err

您还需要将错误响应发送回客户端。服务器收到的每个http请求都需要发送某种类型的响应:

const createInbox = (request,response) => {
    const { name,email,body,tag,subject } = request.body
      console.log("request body",request.body)
        pool.query('INSERT INTO inbox (name,subject ) VALUES ($1,$2,$3,$4,$5)',[name,subject ],(error,results) => {
          if (error) {
            console.error(error.message);                // log correct variable
            response.status(500).send(error.message);    // send error response
            return;
          }
          console.log("get to Success  contact")
          response.status(200).send(`Inbox Added`)
        })
       
  }
,

您的服务器正在关闭,因为您的回调函数引用的是error而不是err

尝试以下代码:

 const createInbox = (request,response) => {
        const { name,subject } = request.body
          console.log("request body",request.body)
            pool.query('INSERT INTO inbox (name,(err,results) => {
              if (err) {
                return console.error(err.message);
              } else
              console.log("get to Success contact")
              response.status(200).send(`Inbox Added`)
            })
           
      }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...