如何将明确的参数传递给 nodejs 异步调用
How to pass express arguments to nodejs asynchronous calls
这是我在快递中遇到的问题。
在我的快速中间件的某个地方,我想检查文件是否存在。
//Setting up express middeleware...
app.use(f1);
app.use(f2);
...
function f1(req, res, next) {
...
//Here I want to check if 'somefile' exists...
fs.access('somefile', callback1, req, res, next);
}
//In the callback, I want to continue with the middleware...
function callback1(err, req, res, next) {
if (err) {
//Report error but continue to next middleware function - f2
return next();
}
//If no error, also continue to the next middleware function - f2
return next();
}
function f2(req, res, next) {
}
如何将 req、res、next 作为参数传递给 fs.access 的回调?
上面的代码不起作用。我怀疑我需要使用闭包,但如何使用?
看待问题的一种完全不同的方式是:例如,我如何使用 fs.access 本身作为快速中间件功能?
对我来说,这种方法更有意义:
假设您想在 f1 中创建一个中间件,然后有一个用于错误处理的中间件 handleError
,以及任何其他中间件。
对于 f1
你已经在闭包中有 req, res 所以你可以在 fs.access 回调中访问。
function f1(req, res, next) {
fs.access('somefile', (err) => {
if (err) return next(err);
// here you already have access to req, res
return next();
}
}
function f2(req, res, next) {
// do some stuff if there is err next(err);
}
function handleError(err, req, res, next) {
if (err) {
// handle somehow the error or pass down to next(err);
}
}
app.use(f1); // you pass down the err |
app.use(f2); // ------------ |
app.use(handleError); // <----|
这是我在快递中遇到的问题。 在我的快速中间件的某个地方,我想检查文件是否存在。
//Setting up express middeleware...
app.use(f1);
app.use(f2);
...
function f1(req, res, next) {
...
//Here I want to check if 'somefile' exists...
fs.access('somefile', callback1, req, res, next);
}
//In the callback, I want to continue with the middleware...
function callback1(err, req, res, next) {
if (err) {
//Report error but continue to next middleware function - f2
return next();
}
//If no error, also continue to the next middleware function - f2
return next();
}
function f2(req, res, next) {
}
如何将 req、res、next 作为参数传递给 fs.access 的回调? 上面的代码不起作用。我怀疑我需要使用闭包,但如何使用?
看待问题的一种完全不同的方式是:例如,我如何使用 fs.access 本身作为快速中间件功能?
对我来说,这种方法更有意义:
假设您想在 f1 中创建一个中间件,然后有一个用于错误处理的中间件 handleError
,以及任何其他中间件。
对于 f1
你已经在闭包中有 req, res 所以你可以在 fs.access 回调中访问。
function f1(req, res, next) {
fs.access('somefile', (err) => {
if (err) return next(err);
// here you already have access to req, res
return next();
}
}
function f2(req, res, next) {
// do some stuff if there is err next(err);
}
function handleError(err, req, res, next) {
if (err) {
// handle somehow the error or pass down to next(err);
}
}
app.use(f1); // you pass down the err |
app.use(f2); // ------------ |
app.use(handleError); // <----|