baisheng / nuxt-thinkjs3

Nuxt.js with Thinkjs
MIT License
11 stars 3 forks source link

跑起来没有达到效果 #1

Closed Jokeway closed 6 years ago

Jokeway commented 6 years ago

访问:http://localhost:8360/ 出现nuxt页面,OK 但是访问Thinkjs路径:http://localhost:8360/index 出现Nuxt给出的404页面

lzq920 commented 6 years ago

应该是nuxt把所有的路由都拦截了,以至于thinkjs自己的路由没有生效

lzq920 commented 6 years ago

@Jokeway 把中间件放在最后面就行了

baisheng commented 6 years ago

不需要调整顺序,如果放置在最后面,会影响 nuxt 的路由。 在实际项目中使用,可以对 middleware 做如下调整:

module.exports = options => {
  let err = null
  const middleware = async (ctx, next) => {
    // 在这里处理你要访问的多模块或者 controller,使其不受 nuxt 拦截。 
    let subdomain = ctx.url.split('/')[1]
    if (subdomain === 'api') {
      return next()
    } else {
      // let isApi
      // 默认访问状态为 404
      ctx.status = 200
      ctx.req.session = await ctx.session()
      await nuxt.render(ctx.req, ctx.res)
      const startTime = Date.now();
      return next().catch(e => {
        err = e
      }).then(() => {
          const endTime = Date.now();
          // nuxt.render(ctx.req, ctx.res)
          if (err) return Promise.reject(err); // 如果后续执行逻辑有错误,则将错误返回
          return new Promise((resolve, reject) => {
            // console.log(`request exec time: ${endTime - startTime}ms`);
          })
        }
      )
    }
  }
  return middleware
}