在Node.js中,可以使用中间件来识别和处理异常请求。以下是一个使用Express框架的示例,展示了如何创建一个中间件来捕获和记录异常请求:
npm install express morgan
app.js的文件,并添加以下代码:const express = require('express');
const morgan = require('morgan');
const fs = require('fs');
const path = require('path');
const app = express();
// 创建一个写入流,用于将日志写入文件
const accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' });
// 使用Morgan中间件记录HTTP请求
app.use(morgan('combined', { stream: accessLogStream }));
// 自定义异常请求中间件
app.use((err, req, res, next) => {
  console.error('Exception caught:', err);
  // 记录异常请求的信息
  const status = err.status || 500;
  const message = err.message || 'Internal Server Error';
  const stackTrace = err.stack || '';
  const logEntry = `[${new Date().toISOString()}] [${status}] [${req.method}] ${req.url} - ${message}\n${stackTrace}\n`;
  // 将异常请求的信息写入日志文件
  accessLogStream.write(logEntry);
  // 返回错误响应
  res.status(status).json({ message: message });
});
// 示例路由,用于触发异常
app.get('/error', (req, res, next) => {
  try {
    throw new Error('This is an error');
  } catch (err) {
    next(err);
  }
});
// 启动服务器
const port = 3000;
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});
在这个示例中,我们创建了一个自定义的异常请求中间件,它捕获并记录异常请求的信息,包括请求方法、URL、状态码、错误消息和堆栈跟踪。然后,我们创建了一个示例路由/error,用于触发异常。
当访问/error路由时,异常请求中间件会捕获异常,并将相关信息记录到access.log文件中。同时,服务器会返回一个包含错误消息的JSON响应。
要运行此示例,请在终端中执行以下命令:
node app.js
然后访问http://localhost:3000/error,查看日志文件access.log以获取异常请求的详细信息。