Node.js使用Koa构建基础项目
Koa是由最初的Express团队构建的超轻量级服务器框架
与Express相比,自由度更高,可以自行引入中间件,更重要的是使用了ES6异步,避免了回调地狱
但是由于代码升级,Koa2需要v7.60以上的node.js环境
一、创建项目
手动创建项目目录,然后快速生成package.json文件
Npm init -y安装koa //当前版本2.4.1npm安装koa -S,然后创建一个app.js//app . jsconst KOA=require(' KOA ');const app=new Koa();app . use(async CTX={ CTX . body=' Wise error ';});app . listen(3000);最后,在package.json中添加开始指令
一个基本的koa应用程序就是这样完成的
您可以执行npm start,并在浏览器中访问http://localhost 33603000/查看效果
如果手动创建项目太麻烦,可以使用支架KOA-generate来生成项目
Npm安装KOA-generator-gkoa 2 project _ name,然后NPM安装项目下的依赖项。如果npm start刚好在KOA之后启动项目,建议在使用脚手架工具之前先阅读一下这个博客,这样可以更好的理解每个依赖包的作用。
二、配置路由
上面app.js中有一个ctx,是Koa提供的一个Context对象,封装了请求和响应每个HTTP请求都会创建一个上下文对象。
我们可以通过Context.request.path获取用户请求的路径,然后通过Context.response.body将内容发送给用户
Koa的默认返回类型是文本/纯文本。如果你想返回一个html文件(或者一个模块文件),你需要修改上下文
另外,Context.response可以缩写,例如,Context.response.type缩写为Context.type,Context.response.body缩写为context.type
在项目下创建一个用于存储html文件的目录视图,并在该目录下创建一个index.html,然后修改app.js
//app.js//原生路由const Koa=require(' Koa ');const fs=require(' fs ');const app=new Koa();app.use(async (ctx,next)={ if(CTX . request . path==='/index '){ CTX . type=' text/html ';ctx.body=fs.createReadStream('。/view/index . html’);} else { wait next();}});app . listen(3000);然后在浏览器中通过访问http://localhost:3000/index可以看到index.html页面,而访问其他地址是找不到的,所以处理URL特别笨拙,所以需要引入路由中间件koa-router
需要注意的是,导入koa-router时,在NPM install KOA-router-S const router=require(' KOA-router ')()的末尾要加一个括号;相当于:const KOA router=require(' KOA-router ');const router=Koarounter();创建一个路由目录来存储路由文件,并在该目录下创建index . js
//routes/index . jsconst fs=require(' fs ');const router=require(' KOA-router ')()router . get('/index ',async (ctx,next)={ CTX . type=' text/html ';ctx.body=fs.createReadStream('。/view/index . html’);});Module.exports=router在这里,您还可以使用prefix方法为文件中的所有接口添加一个baseUrl//router.prefix('/about ')
修改app.js
//app . jsconst Koa=require(' Koa ');const app=new Koa();const index=require('。/routes/index ')app . use(index . routes()、index . allowedmethods())app . listen(3000);以上允许的方法用于验证请求的方法。如果您使用post请求访问get接口,它将直接返回一个失败。此外,您可以向url添加一个变量,然后通过Context.params.name访问它
router.get('/about/:name ',async (ctx,next)={ ctx.body=`我是${ctx.params.name}!`;});
三、静态资源
在上面的index.html,如果你需要引入静态资源比如css,你需要使用koa-static
Npm install koa-static -S创建一个公共目录来存储静态资源
然后在app.js中添加以下代码
const static=require(' KOA-static ');//将公共目录设置为静态资源目录const main=static(_ dirname '/public ');app.use(主);事实上,这三行代码也可以优化app . use(require(' KOA-static ')(_ _ dirname/' public '));然后你可以在index.html介绍相应的文件
四、模板引擎
上面的路线是用fs模块直接读取html文件建议在开发时使用KOA-view中间件来渲染页面
在app.js中,NPM安装KOA-view-s将视图目录设置为模板目录const view=require(' KOA-view ')app . use(view(_ _ dirname '/view ');然后,在路由文件中,可以使用render方法//routes/index . jsconst router=require(' KOA-router ')()router . get('/index ',async (CTX,next)={ await CTX . render(' index ');});以上就是直接渲染html文件的方法。如果要引入模板引擎,可以添加扩展字段来设置模板类型app . use(view(_ _ dirname/' view ',{extension: 'pug' //以pug模板为例)}
五、结语
如果把Express看成是webstorm,那么Koa就是崇高的当Express流行起来时,它复杂的依赖关系受到了许多开发人员的批评
因此,Express团队拆解了Express,只留下最基本的骨架,让开发人员自己组装。这是Koa
正如文章中提到的,从头开始太麻烦了,您可以使用脚手架koa-generato进行快速开发
不过,我建议在熟悉Koa之后,搭建一个适合你项目的脚手架
不然为什么不直接用快递
我想这也是Koa官方文件没有提到generato工具的原因
版权声明:Node.js使用Koa构建基础项目是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。