用koa写项目后台遇到的bug及解决
-
import,exports使用ES6规范时,项目运行会报错:
原因:是因为目前 NodeJs 只支持部分 ES6 的语法,有些 ES6 的语法还不支持,而 import 语法就是其中之一
解决: 改为CommonJs 的语法格式,诸如:
const Koa = require('koa')
module.exports = app
-
Error: get
/login
:middleware
must be a function, notundefined
分析:我的逻辑是将路由记录写在router里,然后按API分成若干js文件,真正完成业务逻辑的部分放在了controllers层,对应某api_controller,bug中的/login是我的一个处理登录逻辑的中间件
在app.js中 :我将路由注册:
// routes 注册路由 app.use(user.routes(), user.allowedMethods())
routes–>user.js中:
const router = require('koa-router')() const user_controller = require('../controllers/user_controller') // koa-router提供一种router.prefix方法,此方法对于某一个router来说,是一个全局配置,此router的所有路径都会自动被添加该前缀。 router.prefix('/user') router.get('/login', user_controller.login) module.exports = router
controllers–>user_controller中:
const login = async(ctx,next) => { const req = ctx.request.body ctx.body = 'this is a users/login response' } module.exports = { login }
最初没有写
module.exports = {
时就报了这个error!!!
login
}原因及解决:的原因是routes里定义的API
router.get('/login', user_controller.login)
和controllers里的exports没有对应上 !!! -
port 3000 is already in us
e的一种可能原因:问题在于重复起调同一个端口,有的人的写法是在app.js中写
app.listen(...)
,有的人会独立建立一个js来描述端口的事宜,如:www.js:
#!/usr/bin/env node /** * Module dependencies. */ var app = require('../app') var debug = require('debug')('demo:server') var http = require