当前位置: 首页 > 后端技术 > Node.js

EDU_BOOK开发概要

时间:2023-04-03 14:34:03 Node.js

EDU_BOOK开发概要KOA2+Mongodb整体框架构建APIKoa2是目前Node.js界最流行的web框架。无论从性能还是流程控制上,koa2及其harem(中间件)都是非常好的解决方案。本文主要讲解koa2的文档解读和runkoa的介绍,让大家对koa2有一个更简单更直接的认识。1.项目目录生成构建项目首先要明确建立文件系统目录,这样就可以清楚地放置项目的文件路径,也定义了项目的结构。项目临时文件目录如下:EDU_Book_Background/├──app├──controllers/│├──loginController.js│└──registController.js├──modules/│└──user.js├───node_mudules├─public├──routes/│├──home.js│├──index.js│├──login.js│└──regist.js├──app.js├──配置。js├──package.json├──start.js└──README.md文件目录分析:app用于存放前端JavaScriptviewtemplatecontrollers用于存放后台controllersmodulesaredataprototypespublic用于存放使用静态资源routers存储路由系统app.js为后台入口文件config.js为配置文件start.js用于es6和es7babel的转换2.koa2搭建(1)首先安装koa2的npm包:npm--save-devinstallkoa@next(2)然后安装koa的路由系统npm包:npm--save-devinstallkoa-router@next(3)安装babel的npm包,转换js语言npm--save-devinstallbabel-corebabel-polyfillbabel-preset-es2015-node6babel-preset-stage-3此时我们已经安装好了koa2框架的基本使用需求。但是我们如何在node环境下运行es6和es7的语法呢?所以我们需要写一个js脚本来转换app.js,也就是server.js文件:require('babel-core/register')({presets:['stage-3','es2015-node6']});require("babel-polyfill");require('./app.js');//确保入口文件是app.js然后每次要启动或调试程序时在cmd下运行:节点启动。js以便我们可以使用koa2编写所需的后台服务api^_^3。koa2服务的编写我们之前说过,app.js是入口文件,一起来看看吧!importKoafrom'koa'//引入koa2constapp=newKoa();app.listen(3000);console.log('appstartedatport3000...');这样就启动了Koa的服务!但这还远远不能为web提供API。我们首先需要的是路由系统。4.在构建Koa2路由系统之前已经安装了koa-router,支持koa2路由系统npm包,所以app.js变为:importKoafrom'koa'importbodyParserfrom'koa-bodyparser'//用于解析requestbodydataimportsessionfrom'koa-session'//用于session会话服务importconvertfrom'koa-convert'//koa2使用koa-session需要convertimportmongoosefrom'mongoose'//connectmongodbuseimportconfigfrom'./config'//程序配置文件importrouterfrom'./routes/index'//引入路由系统文件mongoose.connect(`mongodb://${config.mongodb.host}:${config.mongodb.port}/${config.mongodb.dbname}`);//从配置文件中加载数据连接数据库constapp=newKoa();app.keys=[config.appKey];app.use(convert(session(app)));//parserequestbody:app.use(bodyParser());//添加路由中间件:app.use(router.routes()).use(router.allowedMethods());app.listen(3000);console.log('appstartedatport3000...');接下来看主体部分,路由系统(1)主路由文件index.js://分多个文件处理路由importRouterfrom'koa-router'importhomeRouterfrom'./home'importloginRouterfrom'./login'从'./regist'constrouter=new导入registRouterRouter();//登录响应路由router.use('/login',loginRouter.routes(),loginRouter.allowedMethods());//注册响应路由router.use('/',homeRouter.routes(),homeRouter.allowedMethods());//主页响应路由router.use('/regist',registRouter.routes(),registRouter.allowedMethods());exportdefaultrouter;(2)示例登录路由文件:login.js:从'koa-router'导入路由器从'../controllers/loginController'导入登录控制器constrouter=newRouter();router.post('/',loginController.loginPost);//处理post方法的/login,调用登录管理控制器router.get('/',loginController.loginGet);//处理get方法的/loginexportdefaultrouter;控制器处理路由:loginController.jsimportUserModelfrom'../models/user'//Loaddataprototypeimport{MD5,SHA256}from'crypto-js';//引入加密方式exports.loginPost=async(ctx,next)=>{varreq=ctx.request,name=req.body.姓名,密码=SHA256(req.body.password),电子邮件=req.body.email;varresult=awaitUserModel.findOne({名字:名字,密码:password.toString(),电子邮件:电子邮件});if(result&&result._id){console.log('登录成功!!!');ctx.set('Access-Control-Allow-Origin','*');ctx.response.status=200;ctx.response.type='应用程序/json';ctx.response.body={name:姓名,password:密码,email:邮箱};}else{ctx.throw(400,'某些信息有误!');console.log('登录信息不匹配!');}}exports.loginGet=async(ctx,next)=>{ctx.response.status=200;ctx.response.body=`

登录

名称:

密码:

电子邮件:

`;}当我们构建好各种路由响应后,我们需要配置数据库5、搭建Mongoose数据库,要使用mongoose链接建库,首先要创建数据原型:user.js:importmongoosefrom'mongoose'varSchema=mongoose.Schema;constUserSchema=newSchema({name:{type:String,required:true},password:{type:String,required:true},email:{type:String,required:true,unique:true},createdTime:{类型:日期,默认值:Date.now()}});varUser=mongoose.model('User',UserSchema);module.exports=用户;这样,当我们需要写入或查询数据时,首先引入数据原型,然后新建一个数据原型的对象,如果匹配正确就可以保存到数据库中:varuser=null,result=null,req=ctx.request,name=req.body.name,password=SHA256(req.body.password),email=req.body.email;user=newUserModel({名字:名字,密码:密码,邮箱:邮箱,});结果=等待user.save().catch(e=>e);//使用await进行异步操作,将数据存入数据库if(result&&result._id){console.log(result._id);console.log('成功');ctx.response.redirect('/登录');}else{console.log("邮箱或用户名已经注册!!!");}查找数据:varreq=ctx.request,name=req.body.name,password=SHA256(req.body.password),email=req.body.email;varresult=awaitUserModel.findOne({name:name,password:password.toString(),email:email});//使用await进行异步操作查询数据库中的数据if(result&&result._id){console.log('登录成功!!!');ctx.set('Access-Control-Allow-Origin','*');ctx.response.status=200;ctx.response.type='应用程序/json';ctx.response.body={name:姓名,password:密码,email:邮箱};}else{ctx.throw(400,'某些信息有误!');console.log('登录信息不匹配!');}这样我们服务器的大体框架就搭建好了,接下来我们需要编写各种API方法、数据模型、关系存储和安全权限验证,这一系列的总结会在接下来进一步补充开发过程