接着上一篇(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); } };
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;
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;
安裝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)。