多次表达中间件调用

时间:2019-02-09 21:13:24

标签: javascript node.js express middleware express-router

我检查了与此主题相关的其他帖子,但在我的代码中找不到问题。

09-February-2019

没有const myMiddleware = (fn) => { return (req, res, next) => { var fullUrl = req.protocol + '://' + req.get('host') + req.url; console.log(fullUrl) next() } } const app = express() app.use('/dist', express.static(__dirname + '/client/dist')) app.use('/static', express.static(__dirname + '/client/static')) app.use(bodyParser.urlencoded({ extended: false })) app.use(cookieParserMiddleware()) app.use(passport.initialize()) const server = https.createServer(options, app) app.get('/', myMiddleware((req, res) => { res.sendFile(__dirname + '/client/dist/index.html') })) app.all('*', (req, res) => { res.redirect('/') }) server.listen(8080, function listening() { console.log('Listening on %d', server.address().port) }) 上的myMiddleware路径,一切都会按预期进行。将'/'附加为myMiddleware,然后多次调用app.get('/', myMiddleware((req, res) => {,而不会调用myMiddleware


编辑:以下错误已通过jfriend00的解决方案修复。多次调用的中间件仍然存在。原因是网站图标和res.sendFile(__dirname + '/client/dist/index.html')行未捕获其他一些资产。修复路径也解决了第一个错误

最重要的是,我尝试删除下面的部分,但该应用程序根本无法工作。我的猜测是这里有2个错误。

app.use('/static', express.static(__dirname + '/client/static'))

我发布了一张有关删除app.all('*', (req, res) => { res.redirect('/') }) 时的外观的图片

enter image description here

1 个答案:

答案 0 :(得分:2)

我要在这里猜测。

更改此:

app.get('/', myMiddleware((req, res) => {
    res.sendFile(__dirname + '/client/dist/index.html')
}));

对此:

app.get('/', myMiddleware(), (req, res) => {
    res.sendFile(__dirname + '/client/dist/index.html')
}));

这样您的res.sendFile()实际上会在myMiddleware调用next()之后被调用。


然后,删除fn参数,这样就可以了(不会更改执行,而是删除误导性和未使用的参数):

const myMiddleware = () => {
    return (req, res, next) => {
        var fullUrl = req.protocol + '://' + req.get('host') + req.url;
        console.log(fullUrl)
        next()
    }
}