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