我的快递是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()的正确方法是什么?
答案 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()
处理程序)。
然后,您可以在所有可用路线中使用该对象。