NodeJS實現(xiàn)Oauth2.0 RESTful API(2. CRUD)

上一節(jié)中我們實現(xiàn)了一個基本的Node應(yīng)用,它可以接受HTTP請求并返回靜態(tài)的JSON。在這一節(jié)中,將對我們的寵物數(shù)據(jù)增加CRUD操作。我們要學(xué)習(xí)如何連接MongoDB,使用Mongoose進行對象建模,實現(xiàn)GET,PUT,POST和DELETE接口。

連接MongoDB

如果你還沒有安裝MongoDB,請登錄Mongo官網(wǎng)下載。

我們需要執(zhí)行三步來連接MongoDB:

  1. 安裝Mongoose包
  2. 加載Mongoose包
  3. 使用Mongoose.connect連接petpot MongoDB

server.js中添加頁面的內(nèi)容:

// Load required packages
var express = require('express');
var mongoose = require('mongoose');

// Connect to the beerlocker MongoDB
mongoose.connect('mongodb://localhost:27017/beerlocker');

創(chuàng)建第一個模型-PET

models文件夾中創(chuàng)建pet.js。
打開pet.js增加下面的內(nèi)容:

// 引入mongoose庫
var mongoose = require('mongoose');

var Schema = mongoose.Schema;

// 定義pet模式
var petSchema = new Schema({
    name: { type: String, required: true },
    type: { type: String, required: true },
    userId: { type: String, required: true },
    quantity: Number
});

// 導(dǎo)出pet模型
module.exports = mongoose.model('pet', petSchema);
  1. 首先,我們引入mongoose包
  2. 創(chuàng)建一個映射到MongoDB集合的Mongoose模式,并定義該集合中文檔的格式
  3. 模式中包括3個字符串和1個數(shù)字,其中3個字符串為必填項
  4. 導(dǎo)出mongoose pet模型用于接下來的應(yīng)用中

創(chuàng)建第一個控制器-PET

controller文件夾中創(chuàng)建pet.js
打開controller/pet.js,首先引入剛才我們創(chuàng)建的pet模型

var Pet = require('../models/pet');

現(xiàn)在為我們的寵物園添加寵物

接著在controller/pet.js中添加頁面的內(nèi)容:

var Pet = require('../models/pet');
var postPets = function(req, res) {
    // 創(chuàng)建Pet模型的一個實例
    var pet = new Pet();
    // 使用Post數(shù)據(jù)設(shè)置這個實例的屬性
    pet.name = req.body.name;
    pet.type = req.body.type;
    pet.quantity = req.body.quantity;
    pet.userId = req.body.userId;

    // 保存實例并檢查錯誤
    pet.save(function(err) {
        if (err) {
            res.json({ message: 'error', data: err });
            return;
        }
        res.json({ message: 'done', data: pet });
    });
};
// 導(dǎo)出方法
module.exports = {
    postPets: postPets
}
  1. 首先引入pet模型
  2. 創(chuàng)建一個函數(shù)postPets,在函數(shù)中創(chuàng)建pet模型的實例,使用post的數(shù)據(jù)來設(shè)置這個實例的屬性并保存
  3. 導(dǎo)出函數(shù),方便接下來應(yīng)用中使用

準備接收 POST或PUT的數(shù)據(jù)

安裝中間件body-parser用于接收 POST或PUT的數(shù)據(jù)

npm install body-parser --save

更新Server.js

增加body-parser中間頁

// Load required packages
var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
// Create our Express application
var app = express();

// Use the body-parser package in our application
app.use(bodyParser.urlencoded({
  extended: true
}));

導(dǎo)入控制器pet

var petController = require('./controller/pet');

增加一個前綴為pet的新路由,為post請求創(chuàng)建接口

router.route('/pets').post(petController.postPets);

使用Postman測試

image.png

獲取所有寵物

打開controller/pet.js增加獲取所有寵物的接口

var getPets = function(req, res) {
    Pet.find(function(err, pets) {
        if (err) {
            res.json({ message: 'error', data: err });
            return;
        }
        res.json({ message: 'done', data: pets });
    });
};

通過指定ID獲取寵物

var getPet = function(req, res) {
    Pet.findById({ _id: req.params.pet_id }, function(err, pet) {
        if (err) {
            res.json({ message: 'error', data: err });
            return;
        }
        res.json({ message: 'done', data: pet });
    });
};

更新寵物信息

var updatePet = function(req, res) {
    Pet.update({ _id: req.params.pet_id }, { quantity: req.body.quantity }, function(err, num) {
        if (err) {
            res.json({ message: 'error', data: err });
        }
        res.json({ message: ' update' })
    })
};

刪除寵物信息

var deletePet = function(req, res) {
    Pet.remove({ _id: req.params.pet_id }, function(err) {
        if (err) {
            res.json({ message: 'error', data: err });
        }
        res.json({ message: 'pet remove!' })
    });
};

導(dǎo)出函數(shù)

module.exports = {
    postPets: postPets,
    getPets: getPets,
    getPet: getPet,
    updatePet: updatePet,
    deletePet: deletePet
}

更新server.js

server.js中更新路由:

router.route('/pets')
    .post(petController.postPets)
    .get(petController.getPets);

router.route('/pets/:pet_id')
    .get(petController.getPet)
    .put(petController.updatePet)
    .delete(petController.deletePet);

Postman測試

image.png

image.png

image.png

image.png

我們現(xiàn)在已經(jīng)對寵物園的寵物實施了全面的CRUD,下一節(jié)我們將創(chuàng)建用戶賬戶,使用Passport進行身份驗證。
完整代碼請訪問github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容