npm init -y
前端
安装koa2node
npm install koa --save
mongodb
项目根目录 新建 index.js数据库
//这是最基本的服务 const Koa = require('koa'); const app = new Koa(); app.use(async(ctx)=>{ ctx.body = '<h1>hello world</h1>' }); app.listen(3000,()=>{ console.log('[server]started at port 3000....') })
本地安装mongodb数据库。npm
添加环境变量 ,按提示建立文件夹。 data/db/api
安装 robo3数据库可视化工具。跨域
安装mongooseapp
npm install mongoose --save
cors
npm install --save bcrypt
schema 文件以下koa
const bcrypt = require('bcrypt'); const SALT_WORK_FACTOR = 10; //加盐位数 //建立User Schema const userSchema = new Schema({ UserId: ObjectId, userName:{unique:true,type:String }, password:{type:String}, createAt:{type:Date,default:Date.now()}, lastLogin:{type:Date,default:Date.now()} },{collection:'user'}) userSchema.pre('save',function(next){ bcrypt.genSalt(SALT_WORK_FACTOR,(err,salt)=>{ if(err) return next(err); bcrypt.hash(this.password,salt,(err,hash)=>{ if(err) return next(err) this.password = hash; next(); }) }) }); //发布模型 mongoose.model('User',userSchema);
init.js
const mongoose = require('mongoose'); const db = 'mongodb://localhost/simle-db'; const glob = require('glob'); //须要安装 const { resolve } = require('path'); //node内置 exports.initSchemas = () => { glob.sync(resolve(__dirname,'./schema','**/*.js')).forEach(require) } exports.connect = () => { //链接数据库 mongoose.connect(db); let maxConnectTimes = 0; return new Promise((resolve,reject)=>{ //增长数据库监听事件 断开链接 mongoose.connection.on('disconnected',()=>{ console.log('*****数据库断开') if(maxConnectTimes < 3){ mongoose.connect(db) maxConnectTimes++; }else{ reject(); throw new Error('数据库出现问题...') } // 错误 }) mongoose.connection.on('error',(err)=>{ console.log('*****数据库错误') if(maxConnectTimes < 3){ mongoose.connect(db) maxConnectTimes++; }else{ reject(err); throw new Error('数据库出现问题...') } }) //连接打开时 mongoose.connection.once('open',()=>{ console.log('mongDB connected successfully... ') resolve(); }) }) }
const { connect ,initSchemas } = require('./database/init.js'); ;(async ()=>{ await connect(); initSchemas(); })()
npm install --save koa-router
const Router = require('koa-router'); let user = require('./appApi/user.js'); let home = require('./appApi/home.js'); // 装载全部子路由 let router = new Router(); router.use('/user',user.routes()) router.use('/home',home.routes()) // 加载路由中间件 app.use(router.routes()) app.use(router.allowedMethods())
npm install --save koa-bodyparser koa2-cors
//index.js // 接收请求的中间件 const bodyParser = require('koa-bodyparser'); // 支持跨域的中间件 const cors = require('koa2-cors'); const bodyParser = require('koa-bodyparser'); // 支持跨域的中间件 const cors = require('koa2-cors'); //这两个是须要放到其余app.use操做以前才生效 app.use(bodyParser()) app.use(cors())
const Router = require('koa-router'); let router = new Router(); const mongoose = require('mongoose'); router.get('/',async(ctx)=>{ ctx.body= "这是用户操做首页" }) router.post('/register',async(ctx)=>{ // console.log('------11') // console.log(ctx.request.body); // console.log('------11') // ctx.body = ctx.request.body; //取得model const User = mongoose.model('User'); //把从前端接收的POST数据封装成一个新的user对象 let newUser = new User(ctx.request.body); //使用mongoose的save方法直接存储,而后判断是否成功 await newUser.save().then(()=>{ //保存成功 返回code == 200,并返回成功信息 ctx.body = { code : 200, msg:"注册成功" } }).catch(error =>{ //失败返回 code = 500,返回错误信息 ctx.body = { code: 500, message:error } }) }) module.exports = router;