如何使用SPA中的nodejs应用程序和中间件重定向到主页?

时间:2018-01-03 22:29:17

标签: javascript node.js express handlebars.js

我正在构建一个使用expresshandlebars作为视图引擎的调查应用。我使用 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()函数是否正常?

1 个答案:

答案 0 :(得分:1)

loadMember函数中的

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
  }
}