mongose + express 写REST API
Posted 无言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于mongose + express 写REST API的主要内容,如果未能解决你的问题,请参考以下文章
将 Express.js-REST-Endpoint 与 Meteor 应用程序集成
如何使用 Advanced REST Client 或 Postman 测试 Express/node REST API 后端?
使用 Express 和 NodeJS 构建 REST API 的最佳实践