温馨提示×

Node.js日志中HTTP错误码代表什么

小樊
42
2025-11-16 18:04:11
栏目: 编程语言

Node.js日志中的HTTP状态码含义

状态码分类概览

  • 1xx 信息性:请求已被接收,继续处理(如:100 Continue101 Switching Protocols)。
  • 2xx 成功:请求已成功接收、理解并处理(如:200 OK201 Created204 No Content)。
  • 3xx 重定向:需要进一步操作以完成请求(如:301 Moved Permanently302 Found304 Not Modified)。
  • 4xx 客户端错误:请求存在语法错误或无法完成(如:400 Bad Request401 Unauthorized403 Forbidden404 Not Found)。
  • 5xx 服务器错误:服务器未能履行合法请求(如:500 Internal Server Error502 Bad Gateway503 Service Unavailable504 Gateway Timeout)。

常见HTTP状态码速查表

状态码 含义 常见原因与排查要点
200 OK 请求成功,返回了预期数据。
201 Created 资源创建成功,多见于 POST/PUT。检查数据库写入与返回位置头。
204 No Content 成功但无内容,多见于 DELETE。确认业务是否应返回内容。
301 Moved Permanently 资源永久迁移。更新站点地图与反向代理/CDN配置。
302 Found 资源临时迁移。检查是否应改用 307/308 保留方法。
304 Not Modified 资源未修改,使用缓存。确认 ETag/Last-Modified 与缓存策略。
400 Bad Request 请求语法/参数错误。校验请求体、查询参数、Content-Type。
401 Unauthorized 未认证。检查认证中间件、Token 是否有效与过期。
403 Forbidden 已认证但无权限。核对角色/权限策略与资源 ACL。
404 Not Found 路由或资源不存在。核对路由表、静态资源路径、数据库记录。
405 Method Not Allowed 方法不被允许。核对路由允许的 GET/POST/PUT/DELETE 等。
408 Request Timeout 请求超时。检查客户端超时设置与服务器处理耗时。
500 Internal Server Error 服务器内部错误。查看异常堆栈、未捕获异常与依赖故障。
502 Bad Gateway 网关/代理从上游收到无效响应。检查上游服务健康与网络。
503 Service Unavailable 服务暂不可用。关注过载、维护、连接池/线程耗尽。
504 Gateway Timeout 网关/代理等待上游超时。优化上游响应时间或调整超时阈值。
以上状态码及其含义为 Web 通用标准,Node.js 只是按标准返回与记录,便于定位问题。

在Node.js中如何设置与记录状态码

  • 原生 http 模块示例:设置状态码并返回响应
    const http = require('http');
    
    const server = http.createServer((req, res) => {
      if (req.url === '/ok') {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('OK');
      } else if (req.url === '/error') {
        res.writeHead(500, { 'Content-Type': 'text/plain' });
        res.end('Internal Server Error');
      } else {
        res.writeHead(404, { 'Content-Type': 'text/plain' });
        res.end('Not Found');
      }
    });
    
    server.listen(3000, () => {
      console.log('Server listening on http://localhost:3000');
    });
    
  • Express 示例:使用链式调用设置状态码与日志
    const express = require('express');
    const app = express();
    
    app.get('/example', (req, res) => {
      if (/* 资源不存在 */) {
        console.warn(`[WARN] 404 | ${req.method} ${req.url}`);
        return res.status(404).send('Not Found');
      }
      res.status(200).send('OK');
    });
    
    // 统一错误处理中间件
    app.use((err, req, res, next) => {
      console.error(`[ERROR] ${err.stack || err}`);
      res.status(500).send('Internal Server Error');
    });
    
    app.listen(3000, () => console.log('Server started'));
    

上述方式可确保在日志中输出准确的 HTTP 状态码,便于快速定位问题。

与网络或系统错误码的区别

  • 日志中的 HTTP 状态码 属于应用层响应状态,表示客户端与服务器交互的结果。
  • 与之不同,诸如 EACCES(权限不足)、EADDRINUSE(端口被占用)、ECONNREFUSED(连接被拒绝)、ETIMEDOUT/ERR_TIMEOUT(超时)、ERR_HTTP2_PROTOCOL_ERROR(HTTP/2 协议错误)等,是 操作系统或网络层错误码,通常出现在 Node.js 启动、网络连接或调用下游服务失败时。遇到这类错误,应检查文件/端口权限、目标服务是否可达、超时配置与协议兼容性。

0