zoukankan      html  css  js  c++  java
  • mongose + express 写REST API

    一、准备工具

          先确保电脑已经安装好nodejs 

           1.mongoose;安装非常简单: npm install mongoose --save   【mongoose封装了mongodb的方法,调用mongoose的api可以很轻松的对mongodb进行操作】

           2.express;npm install express --save                    【Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,

                                                                                                                 和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。

           3.mongodb(mongodb安装可以看我写的博客)

    二、新建db.js文件,引入mongoose连接mongodb数据库服务,

           将这个文件模块化,module.exports = mongoose;暴露mongoose,方便其他文件require引入使用

    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://127.0.0.1/wuyan');
    
    /**
     * 连接成功
     */
    mongoose.connection.once('connected', function () {
        console.log('数据库连接成功');
    });
    
    /**
     * 连接异常
     */
    mongoose.connection.once('error', function (err) {
        console.log('数据库连接错误: ' + err);
    });
    
    
    /**
     * 连接断开
     */
    mongoose.connection.once('disconnected', function () {
        console.log('数据库连接已关闭');
    }); 
    
    module.exports = mongoose;

    三、新建model.js文件,引入上面新建的db.js文件

           创建属于mongoose的Schema对象

           构造users跟books两个集合,并导出model对象供其他文件使用

           

    const mongoose = require('./db.js');
     const Schema = mongoose.Schema;
    
     const userSchema = new Schema({
         username:String,
         password:String,
         gender:String
     })
    
     const bookSchema = new Schema({
        title:String,
        desc:String,
        prize:String
    })
    
    module.exports = {
        // users、books表示存放文档的集合名称(从myslq的角度看就是创建users表,表的字段是userSchema构造器写的属性)
        UserModel:mongoose.model('users',userSchema),
        BookModel:mongoose.model('books',bookSchema)
    }

    四、新建service.js文件,引入上面新建的model.js文件

           对文档进行增删改查操作    

    const model = require('./model');
    
    // 注册账号
    function _Register(params = {}, callback) {
        model.UserModel.create(params, (err, res) => {
            if (!err) {
                console.log('注册成功')
                callback && callback(res);
            }
        })
    }
    _Register({username:'测试名',password:'1233454',gender:'男'});

         在存放service.js的文件夹下打开命令行,键入node service.js 即可看到效果

        

        

        不过上面做的并不能实现我说的目地,所以继续将这个文件的各个方法暴露出去

    const model = require('./model');
    
    // 注册账号
    function _Register(params = {}, callback) {
        model.UserModel.create(params, (err, res) => {
            if (!err) {
                console.log('注册成功')
                callback && callback(res);
            }
        })
    }
    
    
    // 登录
    function _Login(params = {}, callback) {
        model.UserModel.find(params, (err, res) => {
            if (!err) {
                if (res.length > 0) {
                    console.log('登录成功')
                    callback && callback(res);
                } else {
                    console.log('用户名或者密码错误')
                }
            }
        })
    }
    
    function _AddBook(book = {}, callback) {
        model.BookModel.create(book, (err, res) => {
            if (!err) {
                console.log('添加书本成功')
                callback && callback(res);
            }
        })
    }
    
    // 获取用户列表
    
    function _GetUserList(parmas = {}, callback) {
        model.UserModel.find(parmas, (err, res) => {
            if (!err) {
                callback && callback(res);
            }
        })
    }
    module.exports = {
        register: _Register,
        login: _Login,
        addBook: _AddBook,
        getUserList: _GetUserList
    }

     五、新建app.js文件 并引入上面新建的service.js文件

            引入express文件写REST API接口

           

    const service = require('./model/service');
    const express = require('express');
    const bodyParser = require('body-parser')
    const app = express();
    // 获取post方法的传参 需要引入body-parser(npm install body-parser -- save)
    app.use(bodyParser.urlencoded({extended:false}))
    
    // 静态文件
    app.use(express.static('public'));
    
    // REST API
    
    app.all('*', function (req, res, next) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
        next();
    });
    
    app.get('/login', (req, res) => {
        let params = req.query;
        service.register(params, (result) => {
            res.json(result)
        });
    
    })
    
    app.get('/userList', (req, res) => {
        let parmas =  req.query;
        service.getUserList(parmas, (result) => {
            res.json(result);
        })
    })
    
    
    app.post('/register',(req,res)=>{
        let parmas = req.body;
        service.register(parmas,(result)=>{
            res.json(result);
        })
    })
    
    
    app.listen(3000, () => console.log('Example app listening on port 3000!'))

    六、前端调用接口

          

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>express API</title>
    </head>
    
    <body>
        <button onclick="getUserList()">获取所有用户数据</button>
        <div>
            <table>
                <thead>
                    <tr>
                        <td>姓名</td>
                        <td>密码</td>
                        <td>性别</td>
                    </tr>
                </thead>
                <tbody class="content"> </tbody>
            </table>
        </div>
        <button onclick="register()">注册</button>
    </body>
    <script src="../public/js/jquery-3.3.1.js"></script>
    <script>
        function getUserList() {
            $.ajax({
                url: 'http://localhost:3000/userList',
                type: 'get',
                dataType: 'json',
                success: function (data, status) {
                    let str = '';
                    for (let i = 0; i < data.length; i++) {
                        str = str + `
                            <tr>
                                <td>${data[i].username}</td>
                                <td>${data[i].password}</td>
                                <td>${data[i].gender}</td>
                            </tr>
                            `
                    }
                    $('.content').append(str);
    
                },
                fail: function (err, status) {
                    console.log(err)
                }
            })
        }
    
        function register() {
            $.ajax({
                url: 'http://localhost:3000/register',
                data: {
                   username:'z',
                   password:'123456',
                   gender:'男'
                },
                type: 'post',
                dataType: 'json',
                success: function (data, status) {
    
                },
                fail: function (err, status) {
                    console.log(err)
                }
            })
        }
    
    </script>
    
    </html>

        

    END

  • 相关阅读:
    [Notes] 如何使用abode audition录歌
    [Tips] matlab save load
    [Tips] matlab csv格式文件读写
    [Tips] 随机数 随机序列 随机排列生成
    [Tips] csv 读写
    [record] 初入android
    HTML中表格table边框border(1px还嫌粗)的解决方案:
    CSS颜色代码大全
    ie9下面的console的bug
    js 性能优化 篇一
  • 原文地址:https://www.cnblogs.com/zhangky/p/10281837.html
Copyright © 2011-2022 走看看