The*_*ist 6 javascript middleware node.js express express-router
我已经检查了与此主题相关的其他帖子,但在我的代码中找不到问题.
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)
})
Run Code Online (Sandbox Code Playgroud)
没有myMiddlewareon '/'路径,一切都按预期工作.与myMiddleware附加为app.get('/', myMiddleware((req, res) => {然后myMiddleware被多次调用,而不res.sendFile(__dirname + '/client/dist/index.html')被调用.
编辑:下面的错误是通过jfriend00的解决方案修复的.多次调用的中间件仍然存在.原因是favicon和其他一些资产没有被app.use('/static', express.static(__dirname + '/client/static'))线路捕获.修复路径也解决了第一个错误
除了这个问题,我已经尝试删除下面的部分,但然后应用程序根本不起作用.我的猜测是这里有2个错误.
app.all('*', (req, res) => {
res.redirect('/')
})
Run Code Online (Sandbox Code Playgroud)
我已经发布了一个关于它在移除时的外观的图像 app.all('*'..)
我在这里做一个猜测。
改变这个:
app.get('/', myMiddleware((req, res) => {
res.sendFile(__dirname + '/client/dist/index.html')
}));
Run Code Online (Sandbox Code Playgroud)
对此:
app.get('/', myMiddleware(), (req, res) => {
res.sendFile(__dirname + '/client/dist/index.html')
}));
Run Code Online (Sandbox Code Playgroud)
这样您在通话res.sendFile()后实际上会接到电话。myMiddlewarenext()
然后,删除fn参数,这样你就得到了这个(不会改变执行,但删除误导性和未使用的参数):
const myMiddleware = () => {
return (req, res, next) => {
var fullUrl = req.protocol + '://' + req.get('host') + req.url;
console.log(fullUrl)
next()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
572 次 |
| 最近记录: |