下一个功能后总是发送错误页面

时间:2018-07-08 02:59:07

标签: express

我的快递是4.16.3。

首先,此代码可以正常工作:

while ((len = is.read(b)) != -1){
                if (isCanceled){
                    return TYPE_CANCELED;
                }else if (isPaused){
                    return TYPE_PAUSED;
                }else {
                    Log.i("down","download : "+total);
                    total += len;
                    savedFile.write(b,0,len);
                    int progress = (int) ((total + downloadedLength) * 100 /contentLength);
                    publishProgress(progress);
                }
            }

但是当我尝试在const express = require('express') const router = express.Router() let app = express() router.use((req, res, next) => { console.log('hi, express') next() }) app.use(router) app.all('*', (req, res) => { res.send("hello, world") }) app.listen(8075, function () { console.log('listening localhost:8072') }) 中设置参数时:

next()

响应始终是错误页面:

const express = require('express')
const router = express.Router()

let app = express()

router.use((req, res, next) => {
  next('hello, express')       ----------------mark
})

app.use(router)

app.all('*', (msg, req, res) => {
    console.log(msg)
    res.send(msg)
})

app.listen(8075, function () {
  console.log('listening localhost:8072')
})

我只是在下一个函数中添加了一个参数,但是它似乎损坏了快速路由器。

对参数使用next()的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

我不知道这在Express文档中的声明位置,但是调用next时所调用的不是直接另一个中间件函数,而是告诉Express框架调用下一个中间件函数。中间件函数具有固定的参数传递给它,因此您只能访问请求,响应和可能调用链中下一个中间件函数的函数。此函数唯一接受的参数是可选的字符串'route'

为了将数据传递到下一个中​​间件功能,您最好的选择是修改请求对象或响应对象。

请参阅Express网站上的Using Express middleware

答案 1 :(得分:0)

在调用req之前将所需数据与next()对象一起附加不是更好的做法吗?

router.use((req, res, next) => {
    req.data = { title: 'your sample data' };
    next();
});

app.all('*', (req, res) => {
    console.log(req.data);
});

这会将您所需的数据附加到request对象,并将控件传递到下一个处理管道(代码中的app.all()处理程序)。

然后,您可以在所有可用路线中使用该对象。