这期内容当中小编将会给大家带来有关使用nodejs + koa2如何模仿springMVC框架,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
1,在硬盘上新增一个文件夹,打开万顺昌点击“添加工作区文件夹& # 39;,如果没有欢迎的使用页面& # 39;,点击——文件——新建窗口,效果如下图:
2,添加VSC调试.Shift + ctrl + p,输入框内输入:发射。json
选择刚刚的文件夹
3,目录结构
从低到高一个一个地> { “name":“koa2mcv" “version":“1.0.0" “description":“你好高雅与MVC" 2例, “main":“app.js" “scripts": { “时:“节点app.js" }, “author":“baba" “dependencies": { “koa":“2.11.0" “koa-router":“8.0.8" “koa-bodyparser":“4.3.0" “koa-static-plus":“0.1.1" “koa-view":“2.1.3" “koa-jwt":“4.0.0" “koa-log4":“2.3.2" “jsonwebtoken":“8.5.1" “nunjucks":“3.2.1" “mime":“2.4.5" “mz":“2.7.0" } }
参数介绍:名称项目名称,版本版本号,描述项目描述,主要项目启动文件,脚本启动快捷设置,作者作者,依赖第3方中间件名称及版本。
3 - 2,应用。js
//启动服务 要求(& # 39;。/config/init # 39;) .startServer ();
启动相关配置,封装到配置/init.js中,启动文件直接引用即可。
3 - 3,观点存放html页面
3 - 4,静态存放静态文件,css, js,字体等
3 - 5, src存放业务控制,类似于springMVC中的控制器,服务。
3 - 6,配置存放核心配置文件。
3-6-1, init。js项目核心。
异常友好处理
函数处理程序(){ 下一个返回异步(ctx)=比;{ .getTime const开始=new日期()(); var urlReq=ctx.request.url; 如果(urlReq !==& # 39;/favicon.ico& # 39;) { console.log(“请求地址:$ {ctx.request。方法}$ {urlReq}”); 尝试{ 让params=对象。分配({},ctx.request。查询,ctx.request.body); 如果配置(“token") .excludeUrl.indexOf (urlReq)==1,,! tokenFunction.varifyToken (params.token)) { ctx。状态=401; 其他}{ 等待下一个(); } }捕捉(错误){ ctx.status=401; console.log(“错误!无法获取令牌参数”); 最后}{ 让犯错={}; 如果(! ctx.status) { 犯错。状态=500; }else if (ctx.status==200) { 返回; 其他}{ 犯错。状态=ctx.status; } 开关(err.status) { 404年情况: 犯错。url=配置(“server-name") + & # 39;公共/404./静态html # 39;; err.message=白试床淮嬖?“; 打破; 401年情况: 犯错。url=配置(“server-name") + & # 39;公共/10000./静态html # 39;; err.message=暗锹绞?请重新登陆!“; 打破; 500年情况: 犯错。url=配置(“server-name") + & # 39;公共/500./静态html # 39;; err.message=跋低衬诓看砦?“; 打破; } 开关(ctx.request.type) { & # 39;application/json # 39;: ctx。=& # 39;类型application/json # 39;; ctx。身体={errorCode:犯错。错误代码,信息:err.message} 打破; 默认值: ctx。=& # 39;类型text/html # 39;; ctx.redirect (err.url); 打破; } } } const女士=new日期().getTime()——开始; 控制台。日志(“请求消耗时间:${女士}女士'); } }
路由配置
函数控制器(){ const路由器=new koaRouter ({ 前缀:配置(“server-name") }); 函数findJsonFile (rootpathStr) { fs.readdirSync (rootpathStr)。forEach(函数(项目、索引){ 让fPath=path.join (rootpathStr、项); 让统计=fs.statSync (fPath); 如果(stat.isDirectory ()===true) { findJsonFile (fPath); } 如果(stat.isFile ()===true&, fPath.endsWith (& # 39; . js # 39;)) { var=需要映射(fPath); (var url映射){ 如果(url.startsWith (& # 39; & # 39;)) { router.get (url.substring(4)映射[url]); }else if (url.startsWith (& # 39; POST & # 39;)) { router.post (url.substring(5),映射[url]); }else if (url.startsWith(& # 39;把& # 39;)){ router.put (url.substring(4)映射[url]); }else if (url.startsWith(& # 39;删除& # 39;)){ router.del (url.substring(7),映射[url]); } 控制台。日志(注册URL: $ {URL} '); } } }); } findJsonFile (rootpath + & # 39; src # 39;); 返回router.routes (); }使用nodejs + koa2如何模仿springMVC框架