请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

没有报错,但是在浏览器访问不到?

start.js内容如下:

require('babel-core/register')({
    'presets': [
        'stage-3',
        'latest-node'
    ]
})
require('babel-polyfill')
require('./server')

https://img1.sycdn.imooc.com/szimg//59842f2600013e9005120205.jpg

https://img1.sycdn.imooc.com/szimg//59842f260001e22d06250440.jpg

但是控制台报错404

package.json中的配置:

"scripts": {
  "dev": "nodemon -w ./server -w ./start.js --exec node ./start.js",
  "build": "nuxt build && backpack build",
  "start": "cross-env NODE_ENV=production node build/main.js",
  "precommit": "npm run lint",
  "lint": "eslint --ext .js,.vue --ignore-path .gitignore ."
}

server下的index.js内容如下:

import Koa from 'koa'
import { Nuxt, Builder } from 'nuxt'
import R from 'ramda'
import { resolve } from 'path'
// Import and Set Nuxt.js options
let config = require('../nuxt.config.js')
config.dev = !(process.env === 'production')
const r = path => resolve(__dirname,path)
const host = process.env.HOST || '127.0.0.1'
const port = process.env.PORT || 3000
const MIDDLEWARES = ['router'];
class Server {
    constructor () {
        this.app = new Koa();
        this.useMiddleWares(this.app)(MIDDLEWARES);
    }
    useMiddleWares (app) {
        return R.map(R.compose(
            R.map(i => i(app)),
            require,
            i => `${r('./middlewares')}/${i}`)
        )
    }
    async start () {
        // Instantiate nuxt.js
        const nuxt = new Nuxt(config)
        // Build in development
        if (config.dev) {
            const builder = new Builder(nuxt)
            builder.build().catch(e => {
                console.error(e) // eslint-disable-line no-console
                process.exit(1)
            })
        }
        this.app.use(ctx => {
            ctx.status = 200 // koa defaults to 404 when it sees that status is unset
            return new Promise((resolve, reject) => {
                ctx.res.on('close', resolve)
                ctx.res.on('finish', resolve)
                nuxt.render(ctx.req, ctx.res, promise => {
                    // nuxt.render passes a rejected promise into callback on error.
                    promise.then(resolve).catch(reject)
                })
            })
        })
        this.app.listen(port, host)
        console.log('Server listening on ' + host + ':' + port) // eslint-disable-line no-console
    }
}
const app = new Server();
app.start();


正在回答 回答被采纳积分+3

2回答

Scott 2017-08-07 21:22:37

代码参考这个试下:


const app = new Koa()
const useMiddleware = (app) => {
  return R.map(R.compose(
    R.map(i => i(app)),
    require,
    i => `${r('./middleware')}/${i}`)
  )
}
const start = async () => {
  let config = require('../nuxt.config.js')
  config.dev = !(app.env === 'production')
  const nuxt = await new Nuxt(config)
  if (conf.env !== 'production') {
    try {
      await nuxt.build()
    } catch (e) {
      console.error(e)
      process.exit(1)
    }
  }
  await useMiddleware(app)(MIDDLEWARE)
  app.use(async (ctx, next) => {
    ctx.status = 200
    
    await nuxt.render(ctx.req, ctx.res)
  })
  app.listen(conf.port, conf.host)
  console.log('Server listening on ' + conf.host + ':' + conf.port) // eslint-disable-line no-console
}
start()


0 回复 有任何疑惑可以回复我~
  • 提问者 拖车板牙爵士 #1
    我试过了,index.js中如果
    useMiddleWares(app) {
            return R.map(R.compose(
                R.map(i => i(app)),
                require,
                i => `${r('./middlewares')}/${i}`)
            )
        }
    清空函数里的内容,就没问题,
    回复 有任何疑惑可以回复我~ 2017-08-08 10:24:12
Scott 2017-08-06 12:39:58

server.js 里面是怎么写的,是不是没有返回任何内容,导致 404 了

0 回复 有任何疑惑可以回复我~
  • 提问者 拖车板牙爵士 #1
    server 下面是config文件,middleware文件夹,还有index.js,都是跟着视频写的,在没有start.js之前,npm run dev是没有问题的,新增start.js之后npm run dev就出错
    回复 有任何疑惑可以回复我~ 2017-08-06 21:32:51
  • 提问者 拖车板牙爵士 #2
    server下的index.js内容如下:
    import Koa from 'koa'
    import { Nuxt, Builder } from 'nuxt'
    import R from 'ramda'
    import { resolve } from 'path'
    
    
    // Import and Set Nuxt.js options
    let config = require('../nuxt.config.js')
    config.dev = !(process.env === 'production')
    
    const r = path => resolve(__dirname,path)
    const host = process.env.HOST || '127.0.0.1'
    const port = process.env.PORT || 3000
    const MIDDLEWARES = ['router'];
    回复 有任何疑惑可以回复我~ 2017-08-07 10:24:22
  • 提问者 拖车板牙爵士 #3
    提交了回复才发现,字数跟排版有限制,因此我重新编辑问题,追加到后面了?
    回复 有任何疑惑可以回复我~ 2017-08-07 10:27:22
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信