美文网首页
koa2+mongodb实现增删改查

koa2+mongodb实现增删改查

作者: 明月半倚深秋_f45e | 来源:发表于2018-07-02 15:58 被阅读0次

    前一段时间在学nodeJS
    nodeJS对于前端人员有着很重要的意义
    nodeJS让前端能够变成全栈

    当然,我突然来学这个只是听说node开发很快
    平时写后台一直用PHP,但是我对PHP的框架研究少,JS才是我的最爱

    言归正传
    这篇文章主要讲的是
    1.mongodb的简单设置
    2.koa2项目初始化
    3.koa2-router来控制路由
    4.mongodb的简单操作
    5.通过接口实现增删改查

    一、mongodb的安装
    安装比较简单
    下载之后一直下一步就好了
    安装完成之后,我们需要配置数据库
    我是在D盘的mongodb目录下 新建一个 data/db
    这里面就是放数据文件了
    然后 我们需要指定 日志文件位置

    D:mongodb/data/log/mongodb.log
    

    然后用命令指定位置

    mongod --dbpath "D:mongodb\data\db" --logpath "D:\mongodb\data\log\mongodb.log" 
    

    最后用重新运行下
    建议下载一个robo3T可视化操作工具,这样操作数据会方便很多

    2.koa2项目初始化
    首先当然是

    npm init
    

    产生一个 pack.json文件了
    然后安装koa2,koa-router,mongoose

    npm install --save koa koa-router mongoose
    

    然后根目录下新建一个app.js作为入口文件
    在这个文件里,我们引用一些常用的模块,同时是作为服务启动文件
    我这里安装了,bluebird(promise支持),koa-logger(日志),koa-session(session),koa-bodyparser(处理请求)

    'use strict'
    
    var fs = require('fs')
    var path = require('path')
    var mongoose = require('mongoose')
    
    var db = 'mongodb://127.0.0.1:27017'
    mongoose.Promise = require('bluebird')
    mongoose.connect(db)
    
    var koa = require('koa')
    var logger = require('koa-logger')
    var router = require('koa-router')
    var session = require('koa-session')
    var bodyParser = require('koa-bodyparser')
    
    var app = new koa();
    
    app.keys = ['imooc']
    
    app.use(logger())
    app.use(session(app))
    app.use(bodyParser())
    
    var router = require('./config/router')()
    app.use(router.routes())
       .use(router.allowedMethods())
    
    app.listen(1234)
    console.log("Listening 1234")
    

    然后我们新建一个app文件夹和一个config文件夹
    config下面放router.js
    app里面放controller和models文件
    我们在controller下新建一个 user.js
    models下新建一个user.js 和counter.js
    特别说明下 counter.js用来控制表的id自增。因为mongodb是没有mysql这样的自增字段的

    router.js
    prefix是给所以的路由加前缀

    'use strict'
    
    var Router = require('koa-router')
    var User = require('../app/controller/user')
    module.exports = function(){
        var router = new Router({
            prefix:'/api'
        })
        router.post('/u/adduser',User.addUser)
        router.post('/u/delete',User.delete)
        router.post('/u/edit',User.edit)
        router.post('/u/getusers',User.findAll)
    
        router.post('/signatrue',App.signature)
        return router
    }
    

    controller下的user.js

    'use strict'
    
    const Koa  = require('koa');
    const app = new Koa();
    const bodyParser = require('koa-bodyparser');
    //自动解析参数
    app.use(bodyParser());
    
    require('../models/user')
    require('../models/counter')
    
    
    var xss = require('xss')
    var mongoose = require('mongoose')
    mongoose.connect('mongodb://root:root1234@localhost:27017/test?authSource=admin')
    
    var User = mongoose.model('User')
    var Counter = mongoose.model('Counter')
    
    exports.addUser = async(ctx)=>{
     
        var userid =await getNextSequenceValue("userid").then(async(data)=>{
            let postData= ctx.request.body;
    
            var user = new User({
                userid:data,
                nickname: postData.nickname,
                avatar: postData.avatar,
                phoneNumber: xss(postData.phoneNumber)
              })
        
            user = user.save()
        }).then(function(){
            ctx.body = {
                success:true
            }
        })
        
    }
    exports.delete = async(ctx)=>{
        let postData= ctx.request.body;
        let id = postData.userid
    
        let flag
        await User.remove({userid:id}, function (err) {
            console.log(err)
            if (err) {
                flag = false
            } else {
                flag = true
            }
    
        });
        ctx.body = {
            success: flag
        }
    }
    
    exports.edit = async(ctx)=>{
        let postData= ctx.request.body;
        let id = postData.userid
        let user = await User.update({userid: id}, {
            $set: {
                nickname: 1231
            }
        })
        ctx.body = {
            success: user
        }
    }
    
    exports.findAll = async(ctx)=>{
        let user = await User.find()
        ctx.body = {
            success:user
        }
    }
    function getNextSequenceValue(sequenceName){
        return new Promise((resolve,reject)=>{
            var sequenceDocument = Counter.findOneAndUpdate(
                sequenceName,
               {$inc:{sequence_value:1}},
            ).exec(function(err,data){
                resolve(data.sequence_value);
            });
        }) 
        
     }
    

    models/counter.js
    这个文件每次把id更新+1来达到自增

    'use strict'
    
    var mongoose = require('mongoose')
    
    var CounterSchema = new mongoose.Schema({
        id:String,
        sequence_value:Number
    })
    module.exports = mongoose.model('Counter',CounterSchema)
    

    models/user.js

    'use strict'
    
    var mongoose = require('mongoose')
    
    var UserSchema = new mongoose.Schema({
        userid:String,
        phoneNumber:{
            unique:true,
            type:String
        },
        areaCode:String,
        verifyCode:String,
        accessToken:String,
        nickname:String,
        gender:String,
        breed:String,
        age:String,
        avatar:String,
        meta:{
            createAt:{
                type:Date,
                dafault:Date.now()
            },
            updateAt:{
                type:Date,
                dafault:Date.now()
            },
    
        }
    })
    module.exports = mongoose.model('User',UserSchema)
    

    这些方法都只能通过ajax访问,目前没有用静态文件来发送请求
    推荐一个RESTClient浏览器插件
    可以填写地址和参数调用接口,来测试我们的接口是否写的正确

    太忙了,先写这么多吧

    相关文章

      网友评论

          本文标题:koa2+mongodb实现增删改查

          本文链接:https://www.haomeiwen.com/subject/astluftx.html