美文网首页NodeJS-Oauth2.0
NodeJS实现Oauth2.0 RESTful API(2.

NodeJS实现Oauth2.0 RESTful API(2.

作者: 冰果2016 | 来源:发表于2018-01-02 15:45 被阅读281次

    上一节中我们实现了一个基本的Node应用,它可以接受HTTP请求并返回静态的JSON。在这一节中,将对我们的宠物数据增加CRUD操作。我们要学习如何连接MongoDB,使用Mongoose进行对象建模,实现GET,PUT,POST和DELETE接口。

    连接MongoDB

    如果你还没有安装MongoDB,请登录Mongo官网下载。

    我们需要执行三步来连接MongoDB:

    1. 安装Mongoose包
    2. 加载Mongoose包
    3. 使用Mongoose.connect连接petpot MongoDB

    server.js中添加页面的内容:

    // Load required packages
    var express = require('express');
    var mongoose = require('mongoose');
    
    // Connect to the beerlocker MongoDB
    mongoose.connect('mongodb://localhost:27017/beerlocker');
    

    创建第一个模型-PET

    models文件夹中创建pet.js
    打开pet.js增加下面的内容:

    // 引入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
    });
    
    // 导出pet模型
    module.exports = mongoose.model('pet', petSchema);
    
    1. 首先,我们引入mongoose包
    2. 创建一个映射到MongoDB集合的Mongoose模式,并定义该集合中文档的格式
    3. 模式中包括3个字符串和1个数字,其中3个字符串为必填项
    4. 导出mongoose pet模型用于接下来的应用中

    创建第一个控制器-PET

    controller文件夹中创建pet.js
    打开controller/pet.js,首先引入刚才我们创建的pet模型

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

    现在为我们的宠物园添加宠物

    接着在controller/pet.js中添加页面的内容:

    var Pet = require('../models/pet');
    var postPets = function(req, res) {
        // 创建Pet模型的一个实例
        var pet = new Pet();
        // 使用Post数据设置这个实例的属性
        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 });
        });
    };
    // 导出方法
    module.exports = {
        postPets: postPets
    }
    
    1. 首先引入pet模型
    2. 创建一个函数postPets,在函数中创建pet模型的实例,使用post的数据来设置这个实例的属性并保存
    3. 导出函数,方便接下来应用中使用

    准备接收 POST或PUT的数据

    安装中间件body-parser用于接收 POST或PUT的数据

    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
    }));
    

    导入控制器pet

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

    增加一个前缀为pet的新路由,为post请求创建接口

    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!' })
        });
    };
    

    导出函数

    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

    我们现在已经对宠物园的宠物实施了全面的CRUD,下一节我们将创建用户账户,使用Passport进行身份验证。
    完整代码请访问github

    相关文章

      网友评论

        本文标题:NodeJS实现Oauth2.0 RESTful API(2.

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