【问题标题】:node.js what is causing error 400 bad requestnode.js是什么导致错误400错误请求
【发布时间】:2020-02-03 19:03:40
【问题描述】:

我正在向我的 node.js Web 应用程序添加一些代码。我添加了这个功能,然后它抛出了错误 400。我通过按 Ctrl-Z 删除它,但它仍然抛出错误 400。然后,我做了一个 test.js,它是 express 的最简单实现,它仍然是收到错误 400。这是我的 test.js 代码:

const app = require("express")();
const http = require("http").createServer(app);
const url = require('url');

app.get("/", function(req, res)
{
    res.sendFile(__dirname + "/test.html");
});

http.listen(3001, function()
{
    console.log("--listening on port 3001");
});

我已检查以确保我输入了正确的 url 和正确的端口。我认为某些东西被缓存并且搞砸了,因为如果我清除缓存或使用 curl,它就可以工作。有什么想法吗?

【问题讨论】:

  • 要确认/消除缓存,您是否尝试过其他浏览器?尝试从命令行发出请求(例如curl http://localhost:3001/
  • 我刚刚尝试了 curl 命令。它按预期工作。肯定是缓存导致了这个问题。

标签: node.js express http caching http-error


【解决方案1】:

使用 process.cwd() 而不是 __dirname,这会导致错误并生成 404。 process.cwd() 将返回节点初始化的目录。它返回您启动 node.js 进程的绝对路径。

const app = require("express")();
const http = require("http").createServer(app);
const url = require('url');
const path = require('path');

app.get("/", function(req, res)
{
    //  res.sendFile(__dirname + "/test.html");
    res.sendFile(process.cwd() + "/test.html");
});

http.listen(3001, function()
{
    console.log("--listening on port 3001");
});

或者你也可以解析__dirname的路径

const app = require("express")();
const http = require("http").createServer(app);
const url = require('url');
const path = require('path');

app.get("/", function(req, res)
{
    __dirname=path.resolve();  
    res.sendFile(__dirname + "/test.html");

});

http.listen(3001, function()
{
    console.log("--listening on port 3001");
});

【讨论】:

    【解决方案2】:

    经过更多研究(感谢 cmets),我终于找到了问题所在!
    我在 cookie 中存储了太多东西,超过了 4KB 的最大值。

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 2020-05-08
      • 2019-01-24
      • 2016-10-13
      • 2021-03-31
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      相关资源
      最近更新 更多