CNode

为什么app.js中写在后面的中间件会比前面的先执行?

问答
EEeylx发布于9 年前最后回复9 年前9 回复5384 浏览0 收藏

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

routes : routes.png

console : console.png

查看回复

回复 (9)

T
Telanx#1·9 年前

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

E
Eeylx#2·9 年前
引用 Telanx因为你没有使用应用级路由 app.use('/', routes)

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

E
Eeylx#3·9 年前

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

T
Telanx#4·9 年前

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

E
Eeylx#5·9 年前
引用 Telanx是我弄错了,如果是app.get是不会被捕获到 但是从你的截图看来,访问/是不应该执行到404,以及Error hanlder里边去的

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

I
Ireoo#6·9 年前

为什么要写return ? From Noder

E
electrmc#7·9 年前

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

Y
yujintang#8·9 年前

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

git@github.com:yujintang/koa2-server.git
A
AnzerWall#9·9 年前

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

参与回复
登录后即可参与回复。登录