vue全家桶+Koa2開發筆記(3)--mongodb

1. 安裝 momgodbphp

brew install mongodb
安裝成功後執行 which mongod
啓動:mongodhtml

2. 下載可視化操做數據庫的軟件 https://robomongo.org/download    Robo 3T 先啓動數據庫監聽,而後再打開該軟件,連接mongodb

3. mongoose 中文文檔   https://mongoose.shujuwajue.com/數據庫

4.啓動數據庫報錯:npm

mongo exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating

建立數據庫文件夾,服務器

修改讀寫權限,(Mac 修改文件讀寫權限app

設置path路徑,添加到mongod啓動參數koa

若是命令沒法執行,加上 sudocurl

sudo chmod a+w /root/.local/share/mongo/db 異步

sudo chmod a+w /data/db  

 

具體如何倒騰成功的 我也不太清楚,反正是上面的幾個步驟來回倒騰,路徑的話 基本上是  /root/.local/share/mongo/db  和 /data/db  

多嘗試幾回。

5. 

在命令行中執行:

curl -d "name=lilie&&age=12" http://localhost:3000/addPerson

curl是在sell命令 請求接口 -d表示post請求

 

6.

由下圖能夠看出

1. 我在代碼中新建的數據庫的名字是在 dbs/config.js 文件中設置的 dataUser;

 

解釋一下:若是在model/truk.js中定義了model, mongoose.model('demo',schema);則數據庫中的表名稱是 demos,與代碼文件名是無關的!

 

2.在models文件夾下設置的文件名稱即對應着數據庫中Collections的單數,也就是說 代碼中 寫的是model 在數據庫中是 models;相似的,代碼中 person,對應着數據庫中的people

 

 

7.鏈接數據庫的步驟:

    1. 啓動數據庫 mongodb,執行命令 mongod,提示監聽 27017端口便可;而後打開 RoBo 3T軟件,自動鏈接 localhost;最後啓動本地 koa 服務器 npm run dev;

    2.

  項目結構如左圖所示,

2.1 新建dbs文件夾,在dbs/config.js文件中 設置鏈接的數據庫 

module.exports = {
  dbs: 'mongodb://127.0.0.1:27017/dbs'
}

2.2 在dbs/models文件夾下 建立表:

const mongoose = require('mongoose')
//Schema 建立表的格式
let personSchema = new mongoose.Schema({name: String, age: Number})
//model是鏈接 操做數據表 和 建立表 的一個橋樑,具體如何實例化,須要在請求接口的 routers/index.js中實例化
module.exports = mongoose.model('Model', personSchema)

2.3 在主文件app.js中綁定數據庫和服務器代碼:

const mongoose = require('mongoose')
const dbConfig = require('./dbs/config')
//使用mongoose 鏈接數據庫 dbs
mongoose.connect(dbConfig.dbs,{
  useNewUrlParser:true
})

2.4 在routes/index.js 文件中實例化規定的具體的表的值,即操做數據庫,增刪改查

2.4.1 增長數據  

router.post('/addPerson', async (ctx, next) => {
  const person = new Person({
    name:ctx.request.body.name,
    age:ctx.request.body.age
  })
  let code;
  try {
    await person.save(); //在這裏保存到數據庫中,注意1.操做數據庫是異步 2.person 使用的是數據庫model的實例化
    code = 0;
    
  } catch (error) {
    code = 1
  }
  ctx.body = {
    code
  }
})

新開命令行,執行  curl -d "name=lilie&&age=12" http://localhost:3000/addPerson 而後 打開 RoBo 3T 右擊 New Connection 選擇refresh,則能夠看到數據庫中添加的數據!

2.4.2 查詢數據

router.post('/getPerson', async(ctx,next)=>{
  //注意的是,查詢使用的是 Person 不是實例化的 person
  const result = await Person.findOne({name:ctx.request.body.name})//獲取單個數據
  const results = await Person.find({name:ctx.request.body.name})//獲取多個數據
  ctx.body = {
    code:0,
    result,
    results
  }
})

 2.4.3 刪除數據

router.post('/removePerson', async(ctx,next)=>{
  //注意的是,查詢使用的是 Person 不是實例化的 person
  await Person.where({
    age:ctx.request.body.age
  }).remove()
  ctx.body = {
    code:0
  }
})

2.4.4 更新數據

router.post('/updatePerson', async(ctx,next)=>{
  //注意的是,查詢使用的是 Person 不是實例化的 person
  const result = await Person.where({
    name:ctx.request.body.name
  }).update({   //改成 updateMany 則更新多條知足的數據
    age:ctx.request.body.age
  })
  ctx.body = {
    code:0,
    result
  }
})

注意:只有增長數據使用的是實例化 new Person 其餘的直接使用的是Person

相關文章
相關標籤/搜索