Express+Mongoose(MongoDB)+Vue2全棧微信商城項目全記錄(二)

用mogoose搭建restful測試接口

接着上一篇(Express+Mongoose(MongoDB)+Vue2全棧微信商城項目全記錄(一))記錄,今天單獨搭建一個restful測試接口,和項目前端分離開來,項目接口開發方法可參照本文,接口測試我通常用postman工具去測試接口。javascript

項目github地址:https://github.com/seven9115/vue-fullstackhtml

前置環境:安裝mongodb:從mogodb官網下載mongodb並安裝。前端

在項目的根目錄新建一個叫server的目錄,用於放置Node的東西。進入server目錄,再新建三個js文件: vue

- index.js (接口服務入口文件) 
- db.js (設置數據庫相關) 
- api.js (編寫接口)java

index.js:node

// 引入編寫好的api
const api = require('./api'); 
// 引入文件模塊
const fs = require('fs');
// 引入處理路徑的模塊
const path = require('path');
// 引入處理post數據的模塊
const bodyParser = require('body-parser')
// 引入Express
const express = require('express');
const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(api);
// 訪問靜態資源文件 這裏是訪問全部dist目錄下的靜態資源文件
app.use(express.static(path.resolve(__dirname, '../dist')))
module.exports = {
    start: () => {
            // 由於是單頁應用 全部請求都走/dist/index.html
            app.get('*', function(req, res) {
                const html = fs.readFileSync(path.resolve(__dirname, '../dist/index.html'), 'utf-8')
                res.send(html)
            })
            // 監聽8088端口
            app.listen(8088);
    }
};
View Code

db.js:ios

// Schema、Model、Entity或者Documents的關係請牢記,Schema生成Model,Model創造Entity,Model和Entity均可對數據庫操做形成影響,但Model比Entity更具操做性。
const mongoose = require('mongoose');
// 鏈接數據庫 若是不本身建立 默認test數據庫會自動生成
mongoose.connect('mongodb://localhost:27017/testDb');

// 爲此次鏈接綁定事件
const db = mongoose.connection;
db.once('error',() => console.log('Mongo connection error'));
db.once('open',() => console.log('Mongo connection successed'));
/************** 定義模式loginSchema **************/
const userSchema = mongoose.Schema({
    title : String,
    website : String
},{collection:"site"});

/************** 定義模型Model **************/
const Models = {
    User : mongoose.model('User',userSchema)
}

module.exports = Models;
View Code

 api.js:git

// 多是個人node版本問題,不用嚴格模式使用ES6語法會報錯
"use strict";
const models = require('./db');
const express = require('express');
const router = express.Router();

/************** 建立(create) 讀取(get) 更新(update) 刪除(delete) **************/

// 獲取已有博客帳號接口
router.get('/api/users',(req,res) => {
    // 經過模型去查找數據庫
    models.User.find((err,data) => {
        if (err) {
            res.send(err);
        } else {
            res.send(data);
        }
    });
});

router.post('/api/users',(req,res) => {
    // 經過模型去查找數據庫
    var user = new models.User({
        title:req.body.title,
        website:req.body.website
    });
    user.save((err,data) => {
        if (err) {
            res.send(err);
        } else {
            res.send(data);
        }
    });
});

router.put('/api/users/:id',(req,res) => {
    return models.User.findById(req.params.id,(err,user) => {
        if(!user){
            res.statusCode = 404;
            return res.send({ error: "未找到該博客"});
        }
        user.title = req.body.title;
        user.website = req.body.website;
        return user.save((err,data) => {
            if (!err) {
                return res.send({ status: 'OK', user:user });
            } else {
                if(err.name == 'ValidationError') {
                    res.statusCode = 400;
                    res.send({ error: 'Validation error' });
                } else {
                    res.statusCode = 500;
                    res.send({ error: '服務器異常' });
                }
            }
        })
    })
})

router.delete('/api/users/:id',(req,res) => {
    return models.User.findById(req.params.id,(err,user) => {
        if(!user){
            res.statusCode = 404;
            return res.send({error: "未找到該博客"});
        }
        return user.remove((err) => {
            if(!err){
                return res.send({ status: "刪除成功"})
            } else {
                res.statusCode = 500;
                return res.send({ error: "服務器異常"})
            }
        })
    })
})

module.exports = router;
View Code

 

安裝moogose和expressgithub

cnpm install express –save
cnpm install mongoose –save

這裏我不用命令行安裝,而是把expree和mongoose安裝整合到npm配置文件:package.json,找到dependencies,加上mogoose和express,這樣項目安裝依賴(cnpm install)的時候會安裝這兩個。web

  "dependencies": {
    "vue": "^2.5.2",
    "vue-router": "^3.0.1",
    "axios": "^0.16.2",
    "mongoose": "^4.12.3",
    "express": "^4.16.2"
  },

將API啓動服務寫入到項目構建本地服務器JS裏:

//啓動API服務
const apiServer = require('../server/index.js')
apiServer.start()

命令行進入項目目錄,安裝依賴並運行項目,此時咱們得保證mongodb數據庫爲運行狀態:(運行方法:找到mongodb安裝目錄下的\bin\mongod.exe)

cnpm install
npm run dev

mongo connection successed表示數據庫鏈接成功。

用postman測試添加博客接口操做:

測試博客get接口:

put和delete接口相似。此時restful測試接口就己大功告成。下一篇寫用戶認證(JWT)。

MongoDb shell基本操做

相關文章
相關標籤/搜索