我正在构建一个使用express
和handlebars
作为视图引擎的调查应用。我使用 partials 方法为徽标创建了一个html模板,该方法重定向到主页('/')
。
在我的src
文件夹中,我创建了一个index.js
文件,其中包含每个路由的一些功能,我使用page
模块来获取html标记从每条路线。
当我在调查路线localhost.../survey
时,徽标不会重定向到主页,它会显示主网址,但不会加载网页视图。
首先,我解决了调用next()
函数的问题。但是,由于我需要使用中间件来加载ctx
param中的用户数据,现在next()
函数对此没有帮助。
我正在使用此代码:
// config routes
page('/', loadMember, (ctx, next) => {
next()
})
function loadMember (ctx, next) {
if (ctx.auth) {
next()
} else {
axios
.get('/test.json')
.then((res) => {
let response = res.data
if (response.email) {
ctx.auth = response
} else {
ctx.auth = false
}
next()
})
.catch((err) => {
console.log(err)
})
}
}
我尝试以不同的方式更改next()
功能,但是我没有成功重定向。
如果我删除loadMember
中间件,例如:
page('/', (ctx, next) => {
next()
})
...重定向效果很好。问题在于中间件肯定。我在中间件中遗漏了什么,next()
函数是否正常?
答案 0 :(得分:1)
next()
没有在正确的位置缩进,以便调用代码中的下一步。
变更单:
function loadMember (ctx, next) {
if (ctx.auth) {
next()
} else {
axios
.get('/test.json')
.then((res) => {
let response = res.data
if (response.email) {
ctx.auth = response
} else {
ctx.auth = false
}
})
.catch((err) => {
console.log(err)
})
next() // HERE
}
}