为什么app.js中写在后面的中间件会比前面的先执行?
发布于 8 年前 作者 Eeylx 4392 次浏览 来自 问答

用nodejs建了一个服务器, 在访问网页的时候, 除了第一次访问, 之后的访问都会报错Error: Can’t set headers after they are sent. 我看了一下貌似是因为后面的中间件比路由先执行了, 但是不太明白为什么会这样? app.js : app.png

routes : routes.png

console : console.png

9 回复

因为你没有使用应用级路由 app.use('/', routes)

@Telanx 如果写成 app.use(routes), 跟写成 app.use(’/’, routes) 有什么区别吗? 我改了还是有这个问题呀

我发现出现这个错误是在我添加了下面这几行代码之后出现的 // 处理表单及文件上传的中间件 app.use(formidable({ uploadDir: path.join(__dirname, ‘public’, ‘images’), // 上传文件目录 keepExtensions: true // 保留后缀 })); 如果不用express-formidable这个中间件就不会出现问题, 这是为什么呢

是我弄错了,如果是app.get是不会被捕获到 但是从你的截图看来,访问/是不应该执行到404,以及Error hanlder里边去的

@Telanx 是 第一次执行到routes里, 第二次开始就是先执行404, error handler, 然后才执行到routes里

为什么要写return ? From Noder

@Eeylx 我也是在用了formidable之后出现了这个问题,原因找到了吗?

formidable 是写在什么地方的? 具体可以看这个框架,了解formidable用法:

git@github.com:yujintang/koa2-server.git

实际上可能不是你看到的那样。。 建议在输出111和222的那里,把url也输出出来

回到顶部