在后端配置koa中遇到很多难题….
为什么使用Koa
因为koa2基于async/await实现中间体系,在一些场景中能更加优雅地实现同步写法。这次打算用它来搭建我一个小项目的后端。
Koa简单配置
首先,koa依赖node 7.6.0及以上版本,版本低的自行升级一下!
在文件夹中npm i koa 即可安装,别忘了还要npm install,同时新建一个app.js文件,写入如下代码:1
2
3
4
5
6
7const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
在命令行输入 node app.js 即可开启node
好了,往往一些大的项目,路由非常多,直接写在app.js会显得入口文件臃肿,这时候需要针对前端访问的地址的不同而进行内容分发,而内容分发,少不了路由,这里要引入一个新的东西:koa-router,当然,这里也需要安装koa-router依赖。1
npm install koa-router
安装后需要在app.js中引用:1
2const Router = require('koa-router');
const router = new Router();
而每一个路由,都需要router.use(‘/test1’,test1)一次,这里可以简化一下,统一在node启动的时候,去注册路由。具体如下:1
2
3
4
5
6
7
8
9
10
11
12
13//首先引入fs模块
const fs = require('fs');
// 其他页面通过 router 加载
let controler = fs.readdirSync(__dirname + '/controler')
controler.forEach((element) => {
let module = require(__dirname + '/controler/' + element)
/*
controler 下面的每个文件负责一个特定的功能,分开管理
通过 fs.readdirSync 读取 controler 目录下的所有文件名,挂载到 router 上面
*/
router.use('/' + element.replace('.js', ''), module.routes(), module.allowedMethods())
})
app.use(router.routes())
这样一来,它就会去注册controler文件夹下的所有js文件!开心!
后端允许跨域请求
后端写了一个接口后,前端调用的时候出现了请求失败的情况,后来发现报错信息是跨域请求失败,这个花费了我很多时间,
一开始以为在前端Vue.config中配置允许就可以了,如下所示
然而!!还是不行!!!!后来跑去后端搞搞….使用cors成功解决…
在koa中使用cors解决跨域问题
第一步当然是要下载依赖咯1
npm install koa-cors
接着在app.js文件中引入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 const cors = require('koa-cors');
app.use(cors({
origin: function (ctx) {
/*这里的if一定要去掉!来允许所有域名的请求*/
//if (ctx.url === '/') {}
return "*"; // 允许来自所有域名请求
},
exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
maxAge: 5,
credentials: true,
allowMethods: ['GET', 'POST', 'DELETE'],
allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
}))
哦对了,监听端口也要记得改一下:1
2https.createServer(options, app.callback()).listen(2452);
//app.listen(2452); //原
大功告成!!!终于弄好了!