mongose + express 写REST API
一、準備工具
? ? ? 先確保電腦已經(jīng)安裝好nodejs?
? ? ? ?1.mongoose;安裝非常簡單:?npm install mongoose --save? ?【mongoose封裝了mongodb的方法,調(diào)用mongoose的api可以很輕松的對mongodb進行操作】
? ? ? ?2.express;npm install express --save? ? ? ? ? ? ? ? ? ? 【Express 是一個簡潔而靈活的 node.js Web應用框架, 提供了一系列強大特性幫助你創(chuàng)建各種 Web 應用,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?和豐富的 HTTP 工具。使用 Express 可以快速地搭建一個完整功能的網(wǎng)站。】
? ? ? ?3.mongodb(mongodb安裝可以看我寫的博客)
?
二、新建db.js文件,引入mongoose連接mongodb數(shù)據(jù)庫服務,
? ? ? ?將這個文件模塊化,module.exports = mongoose;暴露mongoose,方便其他文件require引入使用
const mongoose = require('mongoose');mongoose.connect('mongodb://127.0.0.1/wuyan');/*** 連接成功*/ mongoose.connection.once('connected', function () {console.log('數(shù)據(jù)庫連接成功'); });/*** 連接異常*/ mongoose.connection.once('error', function (err) {console.log('數(shù)據(jù)庫連接錯誤: ' + err); });/*** 連接斷開*/ mongoose.connection.once('disconnected', function () {console.log('數(shù)據(jù)庫連接已關(guān)閉'); }); module.exports = mongoose;?
三、新建model.js文件,引入上面新建的db.js文件
? ? ? ?創(chuàng)建屬于mongoose的Schema對象
? ? ? ?構(gòu)造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的角度看就是創(chuàng)建users表,表的字段是userSchema構(gòu)造器寫的屬性)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 即可看到效果
? ??
? ??
? ? 不過上面做的并不能實現(xiàn)我說的目地,所以繼續(xù)將這個文件的各個方法暴露出去
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}))// 靜態(tài)文件 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!'))?
六、前端調(diào)用接口
? ? ??
<!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 οnclick="getUserList()">獲取所有用戶數(shù)據(jù)</button><div><table><thead><tr><td>姓名</td><td>密碼</td><td>性別</td></tr></thead><tbody class="content"> </tbody></table></div><button οnclick="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
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhangky/p/10281837.html
總結(jié)
以上是生活随笔為你收集整理的mongose + express 写REST API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这是一次 docker 入门实践
- 下一篇: 小朋友排队|2014年蓝桥杯B组题解析第