【问题标题】:NodeJS, Express and SQLite: handling error messages?NodeJS、Express 和 SQLite:处理错误消息?
【发布时间】:2019-12-02 16:00:54
【问题描述】:

我正在使用 POSTMAN 将带有 JSON 对象的 post 请求发送到我的 nodejs express 服务器。

下面是代码:


var express = require('express');
var app = express();

var bodyParser = require('body-parser');

app.use(bodyParser.json()); //need this to get req.body into json

var path = require('path');
var server = require('http').Server(app);

var sqlite = require("better-sqlite3");
var db = new sqlite("bankdatabase.db");


onst createCustomerDBStatement = db.prepare('INSERT INTO customers(firstname, lastname, ssn) VALUES (?, ?, ?)');

app.post('/createaccount', function(req, res){

    var successOrFailed = "success";
    var createBankAccountRequest = req.body;
    console.log(createBankAccountRequest);

    var rows = db.prepare(`SELECT * FROM customers WHERE ssn = ${createBankAccountRequest.SSN}`).all();

    console.log(rows);

    if (rows.length > 0) {

        console.log("Customer exists already");

    } else {

        createCustomerDBStatement.run(createBankAccountRequest.FirstName, createBankAccountRequest.LastName, createBankAccountRequest.SSN);
    };


    var createBankAccountResponse = {status: successOrFailed, "account number": bankAccountNumber, "customer id": customerID};

    res.json(createBankAccountResponse); 

});

现在,如果我的 sql 查询有问题,那么我会在命令行控制台和 POSTMAN 应用程序/程序上收到一条错误消息。

如何编写自定义错误消息并在出现错误时执行某些操作?

对于我上面的程序,如果有错误,我想设置var successOrNot = "failed"并将它们发送到我的res.json

另外,当 sql 查询出错时,res.json 似乎没有发送。

我试过了:

const createCustomerDBStatement = db.prepare('INSERT INTO accounts(customerid, accountnumber, accounttype, balance) VALUES (?, ?, ?, ?)', (err) => {
        if (err) {
            console.log('ERROR!', err);
            successOrFailed = "failed";
        } else {
            successOrFailed = "success";
        };
    });

但它什么也没做。

【问题讨论】:

  • 在您准备好“准备好的声明”后,我看不到任何 stmt.run()stmt.finalize() 电话。
  • @Paulsm4,我在“else”语句下有这个:createCustomerDBStatement.run(createBankAccountRequest.FirstName, createBankAccountRequest.LastName, createBankAccountRequest.SSN);

标签: node.js sqlite express


【解决方案1】:

错误处理

错误处理是指 Express 如何捕获和处理错误 同步和异步发生。 Express 自带一个 默认错误处理程序,因此您无需自己编写即可获取 开始了。

捕捉错误

确保 Express 捕获所有发生的错误很重要 在运行路由处理程序和中间件时。

在路由处理程序和同步代码中发生的错误 中间件不需要额外的工作。如果同步代码抛出错误, 然后 Express 会捕获并处理它。

默认错误处理程序

Express 带有一个内置的错误处理程序,可以处理任何 应用程序中可能遇到的错误。这个默认 错误处理中间件函数添加在末尾 中间件函数栈。

如果您将错误传递给 next() 并且您没有在自定义中处理它 错误处理程序,它将由内置的错误处理程序处理;这 错误将与堆栈跟踪一起写入客户端。堆栈 trace 不包含在生产环境中。

如果您在开始编写代码后调用 next() 并出现错误 响应(例如,如果您在流式传输时遇到错误 响应客户端)Express 默认错误处理程序关闭 连接,请求失败。

因此,当您添加自定义错误处理程序时,您必须委托给 默认 Express 错误处理程序,当标头已发送时 给客户:

 function errorHandler (err, req, res, next) {
  if (res.headersSent) {
    return next(err)
  }
  res.status(500)
  res.render('error', { error: err })
}

https://expressjs.com/en/guide/error-handling.html

【讨论】:

    猜你喜欢
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多