You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js Ajax POST 404错误:定时获取控制器数据失败

解决Ajax POST请求404 (Not Found)问题的排查步骤

嘿,我来帮你捋一捋这个POST 404的问题!这种情况大概率是路由配置、请求路径不匹配导致的,咱们一步步排查:

1. 先确认路由是否正确注册

首先得保证你的后端框架(看起来是Express)里,已经正确把queue2函数绑定到了POST路由上,而且路径要和前端Ajax请求的完全一致。比如你应该有类似这样的代码:

// 假设你的路由文件里
const queue2 = require('./path/to/your/controller');
app.post('/queue2', queue2); // 这里的/queue2要和前端请求的URL完全匹配

一定要检查前端Ajax的请求URL:是/queue2还是带了前缀(比如/api/queue2)?多一个斜杠、少一个前缀都会直接导致404。

2. 验证请求方法和参数传递

你的控制器用了req.param('mac'),但POST请求的参数通常在请求体里。前端Ajax要确保:

  • 请求方法是POST(别写错成GET了)
  • 设置了正确的Content-Type(比如application/json)
  • 把mac参数放在请求体里

举个前端Ajax的正确示例:

setInterval(() => {
  $.ajax({
    url: '/queue2', // 这里路径必须和后端路由一致
    method: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ mac: '你的设备MAC地址' }),
    success: (data) => {
      console.log('获取到数据:', data);
    },
    error: (xhr) => {
      console.error('请求出错:', xhr.statusText);
    }
  });
}, 5000);

3. 检查路由注册顺序

在Express里,路由是按注册顺序匹配的,如果有通配符路由(比如app.get('*', ...))写在了queue2路由前面,会直接拦截所有请求,导致404。一定要把app.post('/queue2', queue2)放在任何通配符路由之前。

4. 直接测试路由可用性

用Postman或者curl直接给后端发POST请求,排除前端的问题:

# 替换成你的后端地址
curl -X POST -H "Content-Type: application/json" -d '{"mac":"test-mac"}' http://localhost:3000/queue2

如果这个请求也返回404,那肯定是后端路由配置的问题;如果能正常返回数据,那就是前端Ajax的请求路径或者方法写错了。

5. 后端代码的响应完整性

你的控制器里有DNS查询的异步逻辑,一定要确保无论成功还是失败,都给客户端返回响应(比如res.send()、res.status().send()),不然请求会挂起,但这不会导致404,只是会让前端一直处于pending状态。补全你的DNS逻辑示例:

function queue2(req, res) {
  var mac = req.param('mac');
  var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress || req.socket.remoteAddress || (req.connection.socket ? req.connection.socket.remoteAddress : null);
  
  dns.lookup(ip, function onLookup(err, addresses) {
    if (err) {
      console.error('DNS查询出错:', err);
      return res.status(500).send('DNS查询失败');
    }
    console.log('解析到的地址:', addresses);
    
    dns.reverse(addresses, function(err, hostnames) {
      if (err) {
        console.error('反向DNS解析出错:', err);
        return res.status(500).send('反向DNS解析失败');
      }
      // 处理完逻辑后返回数据
      res.send({ status: 'success', mac: mac, hostnames: hostnames });
    });
  });
}

先从路由匹配和请求路径开始排查,这是POST 404最常见的原因!

内容的提问来源于stack exchange,提问作者Max13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:07:08