使用koa接受post请求报错404 这是什么原因

ajax

 xmlhttp.onreadystatechange = function () {
      if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
        if (xmlhttp.responseText) {
          alert(' 验证成功')
        }
      }
    }
    xmlhttp.open('POST', 'http://localhost:3000/e', true)
    xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
    xmlhttp.send(data)
    alert(data.email)

koa2

router.post('/e', async (ctx, next) => {
    
        var name = ctx.request.body.email || '';
        ctx.response.set("Access-Control-Allow-Origin", '*');
        ctx.response.body = '用户名或密码错误';
        console.log(name);
        
});

已经确定服务器端正确接受了请求 但是接收到的状态码是404这是什么原因?

阅读 11.8k
4 个回答

服务器收到了请求因为域名正确 404报错以为具体路径有误

我使用Koa2。看了个帖子,发现Koa默认返回状态status默认是404,前端发送POST请求的时候,如果不主动改变ctx.body的值,那么打印你API返回的ctx可能是这样:

"request": {
    "method": "POST",
    "url": "/api/wkcs/upd",
    "header": {
        "host": "127.0.0.1:3000",
        "connection": "keep-alive",
        "content-length": "2",
        "accept": "application/json, text/javascript, */*; q=0.01",
        "origin": "http://127.0.0.1:3000",
        "x-requested-with": "XMLHttpRequest",
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
        "content-type": "application/json",
        "referer": "http://127.0.0.1:3000/edit?wkid=59f583d6-a4d8-450d-97c7-657e21853d68",
        "accept-encoding": "gzip, deflate, br",
        "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7,ja;q=0.6",
        "cookie": "myusername=eyJteXVzZXJuYW1lIjoiYmVhdHMifQ=="
    }
},
"response": {
    "status": 404,
    "message": "Not Found",
    "header": {}
},
"app": {
    "subdomainOffset": 2,
    "proxy": false,
    "env": "development"
},
"originalUrl": "/api/wkcs/upd",
"req": "<original node req>",
"res": "<original node res>",
"socket": "<original node socket>"

注意看response,如果你不对ctx中的参数做任何更改,response始终会是Koa默认的404 —— 即便你的后台逻辑一切正常!

如果像那位答主说的,将ctx.body改写一下body的话,此处response返回值就是正常的200。


总结一下:

一、如果浏览器直接报404,基本上是你的URL没写对,或是POST参数配错了。

二、如果浏览器没有报错,只是你查看后台发现response返回404,那么你后台API逻辑可能仍可以正常运行,只是因为没有操作Koa的ctx.body,修改其默认的status。此时,你POST提交的data会被封装进ctx.request.body.你的数据字段名里,后台可以读取,正常完成你的业务逻辑。

如果还有问题,拿IDE给后台加断点,看看能否读到ctx.request.body.你的数据字段名这里的数据吧。

路由没有写错,但是如果没有输出响应,确实为404

ctx.body = '用户名或密码错误';

试试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题