2017-02-15 51 views
2

Есть ли способ использовать 2 функции промежуточного программного обеспечения, как это:Использование 2 промежуточного слоя функции в одном посте

route.post('/login', auth.isAuthenticated, multer.any(), function(req,res) { 
    res.send("bla bla bla"); 
} 

Могу ли я использовать как auth.isAuthenticated и multer.any() (для загрузки файлов)?

ответ

3

Вы должны быть в состоянии передать массив промежуточного программного обратных вызовов вы хотели бы казнили, как это в соответствии с docs:

http://expressjs.com/en/4x/api.html#router.METHOD

router.METHOD (путь, [обратного вызова, ...] обратный вызов)

route.post('/login', [auth.isAuthenticated, multer.any()], function(req, res) { 
    res.send("bla bla bla"); 
}); 

Обновление:

Вам может потребоваться структурировать, где все обратные вызовы находятся в скобках массива []:

route.post('/login', [auth.isAuthenticated, multer.any(), function(req, res) { 
    res.send("bla bla bla"); 
}]); 

Вы могли бы также рассмотреть возможность использования app.use() регистрировать обратные вызовы, как так:

var route = express.Router(); 

var require = require('multer'); 
var upload = multer({ dest: '/some/path' }); 

route.use(auth.isAuthenticated); 
route.use(upload.any()); 

app.use("/login", route); 

Надеемся что помогает!

+0

но что, если я просто хотел использовать промежуточное ПО только для 1 маршрута? могу ли я справиться с этим с помощью route.use (auth.isAuthenticated); Я имею в виду, что если я это сделаю, все мои маршруты будут связаны с этим промежуточным программным обеспечением, иначе он будет другим? –

+0

Вы правы, '.use()' будет для ** всех ** HTTP-глаголов, поэтому он может быть не идеальным/действительным для конкретных ситуаций. Я обновил свой ответ, чтобы показать, как он применим только к маршруту «/ login». В качестве примера я привел бы все HTTP-глаголы для маршрута «/ login» при использовании 'use()'. Благодаря! –

+0

очень хорошо спасибо –