Nodejs app.error 异常日志 提示没有error方法

Nodejs app.error 异常日志 提示没有error方法

Nodjs开发指南中 Express 中添加错误的日志功能代码如下

app.error(function(err, req, res, next){
  var meta = '['+new Date()+']' + req.url + '\n';
  errLogfile.write(meta + err.stack + '\n');
  next();
});

但在运行时提示 app.error不是有效的方法?


3 回复

Node.js app.error 异常日志提示没有 error 方法

在使用 Express 框架时,如果你发现代码中使用了 app.error 方法,并且在运行时提示 app.error 不是一个有效的方法,那么你需要了解的是,app.error 已经在较新的版本中被废弃并移除了。为了实现相同的功能,你应该使用中间件来处理错误。

示例代码

下面是一个示例代码,展示如何使用中间件来捕获并记录错误:

const express = require('express');
const fs = require('fs');

const app = express();

// 创建一个日志文件
const errLogFile = fs.createWriteStream('./error.log', { flags: 'a' });

// 错误处理中间件
app.use((err, req, res, next) => {
  const meta = `[${new Date()}] ${req.url}\n`;
  errLogFile.write(meta + err.stack + '\n');
  next(); // 继续执行下一个中间件或路由处理程序
});

// 示例路由
app.get('/', (req, res) => {
  throw new Error('这是一个示例错误');
});

// 启动服务器
app.listen(3000, () => {
  console.log('服务器运行在 http://localhost:3000');
});

解释

  1. 引入模块:

    • express:Express 框架。
    • fs:Node.js 的文件系统模块,用于创建日志文件。
  2. 创建日志文件:

    • 使用 fs.createWriteStream 创建一个日志文件 error.log,用于存储错误信息。
  3. 错误处理中间件:

    • app.use 用于注册中间件函数,该函数接收四个参数 (err, req, res, next)
    • 在中间件函数中,我们构造错误信息并将其写入日志文件。
    • 调用 next() 让 Express 继续处理其他中间件或路由处理程序。
  4. 示例路由:

    • 定义一个简单的路由 /,并故意抛出一个错误以触发错误处理中间件。
  5. 启动服务器:

    • 监听端口 3000,当服务器启动后输出日志信息。

通过这种方式,你可以有效地捕获并记录应用程序中的错误,而无需依赖已被废弃的 app.error 方法。


由于版本问题,改为下面的即可

app.use(function(err, req, res, next){
  var meta = '[' + new Date() + '] ' + req.url + '\n';
  errorLogfile.write(meta + err.stack + '\n');
  next();
});

在较新版本的 Express.js 中,app.error() 方法已经被弃用。你可以使用中间件来捕获并记录错误。以下是使用 app.use() 的示例代码,它可以帮助你实现类似的功能:

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

// 错误处理中间件
app.use((err, req, res, next) => {
  const meta = `[${new Date()}] ${req.url}\n`;
  errLogfile.write(meta + err.stack + '\n');
  res.status(500).send('服务器发生错误,请稍后再试。');
});

// 示例路由
app.get('/', (req, res) => {
  throw new Error('这是一个测试错误');
});

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`服务器运行在 http://localhost:${port}`);
});

解释

  1. 错误处理中间件:我们定义了一个错误处理中间件,它接受四个参数:errreqresnext

    • err 是捕获到的错误对象。
    • req 是请求对象。
    • res 是响应对象。
    • next 用于调用下一个中间件。
  2. 日志记录:我们将错误信息和当前时间写入日志文件。

  3. 错误响应:我们向客户端返回一个错误响应,并设置状态码为 500(内部服务器错误)。

通过这种方式,你可以捕获和记录应用程序中的错误,并向客户端返回适当的响应。

回到顶部