nodejs框架-koa
1. 中文文档地址:https://koa.bootcss.com/
2. node模块仓库地址:https://www.npmjs.com/
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);//监听localhost:3000
由于每次更新都需要重启服务,这显然不方便,我们希望修改了文件服务能自动重启.nodemon能实现这样功能
1. 全局安装npm i nodemon -g
2. 启动服务的时候用nodemon app.js 代替node app.js
3. 也可以在package.json里面重新设置 代码如下:
"scripts": {
"start": "nodemon app.js"
},//启动项目就 npm start 就行了
npm i koa-router --save-dev
const Koa = require('koa')
const Router = require('koa-router')
const app = new Koa()
const router = new Router();
router.get('/', ctx => {
ctx.body = 'hello world'
})
router.get('/demo1', ctx => {
ctx.body = 'demo1'
})//get请求
router.post('/demo1', ctx => {
ctx.body = 'demo1'
})//post请求
router.all('/demo2', ctx => {
ctx.body = 'demo2'
})//router.all表示两种方式都支持
app.use(router.routes());
app.listen(3000, () => {
console.log('服务已启动,在 http://localhost:3000/');
});
const Router = require('koa-router')
const cityRouter = new Router(
{
prefix: "/city" //配置父路由
}
);
cityRouter.all('/add', ctx => {
ctx.body = '城市增加'
})
cityRouter.all('/getList', ctx => {
ctx.body = '城市获取列表数据'
})
cityRouter.all('/del', ctx => {
ctx.body = '城市删除'
})
cityRouter.all('/edit', ctx => {
ctx.body = '城市编辑'
})
module.exports = cityRouter;
const cityRouter = require('./city')
//const filmRouter = require('./film')
...
//导出一个方法 然后在app.js里面使用 初级封装=>后面会模仿vue的路由封装到底
function initRouter(app) {
app.use(cityRouter.routes());
// app.use(filmRouter.routes());
...
}
module.exports = initRouter
const Koa = require('koa')
const app = new Koa()
const initRouter = require("./router/index")
//路由
initRouter(app)
app.listen(3000, () => {
console.log('服务已启动,在 http://localhost:3000/');
});
一个请求从发出到返回数据,如果我们想在这个过程里做一些统一的操作,可以使用中间件来完成.
app.use((ctx, next) => {
// 在ctx上放入username,后面的所有请求的ctx里都会有username这个变量
ctx.username = '我是Mr.He';
// 处理完之后放行,不使用next()的话,程序会被挂起来不动了
next(); // 在vue路由守卫里曾使用过next
})
npm i koa-static --save-dev
const koaStatic = require('koa-static');
app.use(koaStatic(__dirname + '/public'));
Document
测试koa静态资源目录
cityRouter.all('/add', ctx => {//.all表示什么请求方式都行(get,post...)
//获取请求参数
const username = ctx.query.username;
const phone = ctx.query.phone;
ctx.body = { //返回
module: 'add',
username,
phone
}
})
npm i koa-body --save
const koaBody = require('koa-body'); app.use(koaBody());
ctx.request.body.xxx
// 把get请求参数和post请求参数都放入params对象
app.use((ctx, next) => {
ctx.params = {
...ctx.query,
...ctx.request.body
}
next();
});
app.use((ctx, next) => {
ctx.set("Access-Control-Allow-Origin", "*");
ctx.set("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS");
// 请求头设置
ctx.set(
"Access-Control-Allow-Headers",
`Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild,x-token,sessionToken,token`
);
if (ctx.method == "OPTIONS") {
ctx.body = 200;
} else {
next();
}
})