koa-router 返回404

来源:5-3 服务端渲染的entry配置

weibo_姚望微晨_0

2018-08-22

{ request:

   { method: 'GET',

     url: '/',

     header:

      { host: 'localhost:3333',

        connection: 'keep-alive',

        'cache-control': 'max-age=0',

        'upgrade-insecure-requests': '1',

        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',

        accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

        'accept-encoding': 'gzip, deflate, br',

        'accept-language': 'zh-CN,zh;q=0.9' } },

  response:

   { status: 404,

     message: 'Not Found',

     header:

      { 'content-type': 'text/plain; charset=utf-8',

        'content-length': '9' } },

  app: { subdomainOffset: 2, proxy: false, env: 'development' },

  originalUrl: '/',

  req: '<original node req>',

  res: '<original node res>',

  socket: '<original node socket>' }


写回答

2回答

weibo_姚望微晨_0

提问者

2018-08-27

路由代码

const Router = require('koa-router')()

const axios = require('axios')

const path = require('path')

const fs = require('fs')

const MemoryFS = require('memory-fs')

const webpack = require('webpack')

const VueServerRenderer = require('vue-server-renderer')


const serverRender = require('./server-render')

const serverConfig = require('../../build/webpack.config.server')


const serverCompiler = webpack(serverConfig)

const mfs = new MemoryFS()

serverCompiler.outputFileSystem = mfs


// console.log('--------------------------------')

// console.log(serverConfig.output.path)


let bundle

serverCompiler.watch({}, (err, stats) => {

if (err) throw err

stats = stats.toJson()

stats.errors.forEach(err => console.log(err))

stats.warnings.forEach(warn => console.warn(err))


const bundlePath = path.join(

serverConfig.output.path,

'vue-ssr-server-bundle.json'

)


bundle = JSON.parse(mfs.readFileSync(bundlePath, 'utf-8'))

console.log('new bundle generated')

})


const handleSSR = async (ctx) => {

console.log(ctx)

if (!bundle) {

ctx.body = '你等一会,别着急......'

return

}


const clientManifestResp = await axios.get(

'http://127.0.0.1:8001/public/vue-ssr-client-manifest.json'

)

const clientManifest = clientManifestResp.data


const template = fs.readFileSync(

path.join(__dirname, '../server.template.ejs'),

'utf-8'

)


const renderer = VueServerRenderer

.createBundleRenderer(bundle, {

inject: false,

clientManifest

})


await serverRender(ctx, renderer, template)

}


// const router = new Router()

Router.get('*', handleSSR)


module.exports = Router



0
0

Jokcy

2018-08-24

然后呢?你的路由代码呢?

0
5
Jokcy
回复
weibo_姚望微晨_0
你的server.js里面的next前面没有await,然后你的服务端渲染的webpack配置.styl那里多了一个vue-style-loader
2018-09-12
共5条回复

Vue核心技术 Vue+Vue-Router+Vuex+SSR实战精讲

深入讲解Vue核心技术,展示Vue应用开发中的各种问题和解决方案

3168 学习 · 853 问题

查看课程