npm init -y
npm i koa koa-router koa-bodyparser koa-static koa-views art-template koa-art-template mongoose -S
npm i nodemon -D
const Koa = require('koa') const app = new Koa() const views = require('koa-views') const bodyParser = require('koa-bodyparser') // const Router = require('koa-router') const path = require('path') // const router = new Router() const {connect} = require('./dbs/init.js') //导入mongodb数据库 const {createUser} = require('./controller/users.js') // 模板引擎 const render = require('koa-art-template'); render(app, { root: path.join(__dirname, 'views'), extname: '.html', debug: process.env.NODE_ENV !== 'production' }); //自执行函数,连接数据库 ;(async ()=>{ await connect() })() const userRouter = require('./controller/users.js') app.use(userRouter.routes(),userRouter.allowedMethods()) // app.use(router.routes(),router.allowedMethods()) app .use(bodyParser({enableTypes:['json', 'form', 'text']})) .use(require('koa-static')(__dirname + '/public')) .use(views(__dirname + '/views', { extension: 'html' })) app.listen(4000,()=>{ console.log('listen at port localhost:4000 '); })
const mongoose = require('mongoose') const db = 'mongodb://localhost/mongo_test'; //link // const glob = require('glob') // const {resolve} = require('path') // exports.initSchemas = ()=>{ // // glob.sync(resolve(__dirname,'./schema','**/*.js')).forEach(require) // } // 链接数据库,URL以mongodb:// + [用户名:密码@] +数据库地址[:端口] + 数据库名。(默认端口27017) // 链接mongodb数据库的连接解析器会在将来移除,要使用新的解析器,经过配置{ useNewUrlParser:true }来链接 ;其余警告参考:https://mongoosejs.com/docs/deprecations.html /** * mongoose从@5.2.8后会弃用一些指令,为防止程序以下警告: * (node:24864) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead. * (node:24841) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect. * 能够以下设置 */ mongoose.set('useNewUrlParser', true) mongoose.set('useFindAndModify', false) mongoose.set('useCreateIndex', true) let dbc = mongoose.connection exports.connect = ()=> { // 连接数据库 mongoose.connect(db) let maxConnectTimes = 0 return new Promise((resolve,reject)=>{ // 增长数据库监听事件:断开连接 dbc.on('disconnected',()=>{ console.log('***********数据库断开***********') if(maxConnectTimes<=3){ maxConnectTimes++ mongoose.connect(db) } else { reject() throw new Error('数据库出现问题,请人为修理.....') } }) dbc.on('error',err=>{ console.log('***********数据库出错***********') if(maxConnectTimes<=3){ maxConnectTimes++ mongoose.connect(db) } else { reject() throw new Error('数据库出现问题,请人为修理.....') } }) dbc.once('open',()=>{ console.log('MongoDB Connected successfully!') resolve() }) }) }
const mongoose = require('mongoose'); const Schema = mongoose.Schema; let ObjectId = Schema.Types.ObjectId; const userSchema = new Schema({ UserId : {type:ObjectId}, userName:{unique:true,type:String},//unique表示索引惟一 password:String, gender:Number, userStatus:Number, createAt:{type:Date,default:Date.now()}, lastLoginAt:{type:Date,default:Date.now()} },{collection:'users'}) const model = { Users:mongoose.model('Users',userSchema) } // 发布模型 module.exports = model
let { addUser, updateUser, delUser, findAllUsers, findOne } = require('./tools.js'); const common = require("../libs/common"); const Users = require('../dbs/schema/Users.js').Users const Router = require('koa-router') ; let router = new Router() router.prefix('/user') // 查找列表 router.get('/list',async (ctx)=>{ let code = 0 // 状态码 let msg = '' // 返回内容 let {keyword} = ctx.query ; let params = { keyword } let ret = await findAllUsers(params) ctx.body = { code, list:ret, msg:'操做成功' } }) // 查找信息 router.get('/detail',async (ctx)=>{ let code = 0 // 状态码 let msg = '' // 返回内容 let {id} = ctx.query ; let params = { id } let ret = await findOne(params) ctx.body = { code, list:ret, msg:'操做成功' } }) router.post('/addUser',async (ctx)=>{ let code = 0 // 状态码 let msg = '' // 返回内容 let {userName,password,gender,type,id} = ctx.request.body ; if(type=='edit'){ if(id){ let ret = await updateUser(ctx.request.body) if(ret.ok==1){ code = 0 msg = '修改为功' } else { code = -1 msg = '修改失败,' } } else{ code = -1 msg = '参数错误,' } } // 删除 else { // let id = common.uuid(); let user = new Users({ userName, password, gender, userStatus:1 }) try { let ret = await addUser(user) console.log(ret); code = 0 msg = '添加成功' } catch (error) { code = -1 msg = '新建失败' } } ctx.body = { code, msg } }) router.post('/del',async (ctx)=>{ let code = 0 // 状态码 let msg = '' // 返回内容 let ret = await delUser(ctx.request.body) console.log(ret); if(ret){ ctx.body = { code, msg:'删除成功' } } else { ctx.body = { code:-1, msg:'参数错误' } } }) module.exports = router
// 导入schama const Users = require('../dbs/schema/Users.js').Users /* 查全部用户 */ exports.findAllUsers = async (params) => { let keyword = params.keyword ||'' ; const reg = new RegExp(keyword, 'i') //不区分大小写 // 模糊查询 let _filter = { userStatus:1, $or:[ { userName:{$regex :reg} } ] } let count = 0 count = await Users.countDocuments(_filter) let ret = await Users.find(_filter).limit(20) let _list = ret.map(v=>{ return { username:v.userName, gender:v.gender, createAt:v.createAt, lastLoginAt:v.lastLoginAt, } }) return { count, list:_list } }; /* 查单个用户 */ exports.findOne = async (params) => { let ret = await Users.findOne({_id:params.id}) let info = { id:ret._id, userName:ret.userName, createAt:ret.createAt, lastLoginAt:ret.lastLoginAt, gender:ret.gender } return { info } }; /* 新增用户 */ exports.addUser = async (userParams) => { console.log('add='); console.log(userParams); return await userParams.save(); }; /** * 编辑 */ exports.updateUser = async (userParams)=>{ console.log('edit='); console.log(userParams); return await Users.updateOne({_id:userParams.id},{ $set:{ userName:userParams.userName, password:userParams.password, gender:userParams.gender } }) } /** * 硬删除 */ exports.removeUser = async (userParams)=>{ return await Users.findOneAndRemove({_id:userParams.id}) } /** * 软删除 */ exports.delUser = async (userParams)=>{ return await Users.findOneAndUpdate({_id:userParams.id},{userStatus:0}) }
运行:npm run devjavascript
loacahost:4000/user/del删除用户html