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的更多相关文章
- 用expressjs写RESTful API
http://blog.csdn.net/kiwi_coder/article/details/36424671 用expressjs写RESTful API http://blog.csdn ...
- 使用Express构建RESTful API
RESTful服务 REST(Representational State Transfer)的意思是表征状态转移,它是一种基于HTTP协议的网络应用接口风格,充分利用HTTP的方法实现统一风格接口的 ...
- Django使用AJAX调用自己写的API接口
Django使用AJAX调用自己写的API接口 *** 具体代码和数据已上传到github https://github.com/PythonerKK/eleme-api-by-django-rest ...
- 一个用beego写的API项目
beego-api 一个使用beego写的API 支持Api日志 支持Swagger注解文档 项目地址: https://github.com/eternity-wdd/beego-api 使用说明 ...
- 通过express来打造api服务器
通过express来打造api服务器[ 后端接口 ] 1.步骤 1.通过脚手架创建项目 const express = require('express'); const router = expre ...
- express 写一个简单的web app
之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...
- 第一次写Web API接口
API是什么?只知道是网络接口,具体怎么写?不会!如何调用?不会!那怎么办? 第一次的经历~~ 需求:为其他项目提供一个接口 功能:为项目提供询盘信息和商家信息,格式为Json字符串 拿过来,就开始做 ...
- Python用Django写restful api接口
用Python如何写一个接口呢,首先得要有数据,可以用我们在网站上爬的数据,在上一篇文章中写了如何用Python爬虫,有兴趣的可以看看: https://www.cnblogs.com/sixrain ...
- 研发团队如何写好API接口文档
导读 背景 痛点在哪? 为什么要写接口文档? API规范 接口工具 总结 背景 随着业务的发展,支撑组的项目也是越来越多.同时,从整个支撑组项目架构体系(含运维和运营体系),我们对系统业 ...
随机推荐
- 彻底弄懂“PKIX path building failed”问题
SSL的基础知识 SSL的全称是Secure Socket Layer.它的通信流程如下图所示,客户端与服务端会通过几次通信,通过非对称加密创建出一个加密密钥,用于以后的对称信息加密. 1,客户端明文 ...
- C、C++打包成.dll .so .a 给Unity使用
C.C++打包成.dll .so .a 给Unity使用 打包.dll库 工具:VS 使用VS新建项目 选择不大于.NET3.5的版本 选择Visual C++ -> Win32 控制台应用程序 ...
- redis哨兵集群环境搭建
一.哨兵的介绍 哨兵(sentinal)是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个redis实 ...
- How To Scan QRCode For UWP (4)
QR Code的全称是Quick Response Code,中文翻译为快速响应矩阵图码,有关它的简介可以查看维基百科. 我准备使用ZXing.Net来实现扫描二维码的功能,ZXing.Net在Cod ...
- 阿里Java开发规范&谷歌Java开发规范&华为Java开发规范&Tab键和空格比较&Eclipse的Tab键设置 总结
现在收集到如下有用的信息: 阿里巴巴公开的Java开发规范:https://yq.aliyun.com/articles/69327?utm_content=m_10088 google公开的Java ...
- 线程中的同步辅助类Semaphore
同步辅助类 线程池 并发集合类 都是在线程同步的基础上增加了一些同步的东西,在线程同步的基础上更好的实现线程同步.实现的效率更高,更方便而已. 多线程并不是很难 需要你把代码写出来...然后分析运 ...
- [个人项目] 使用 Vuejs 完成的音乐播放器
Foreword 虽然音乐播放这类的项目的静态展示居多,业务逻辑并不复杂,但是对于我这种后端出身的前端萌新来说,能使用vuejs完成大部分功能, 也会有许多收获. api:我使用的是一个开源的 nod ...
- T-SQL 分布式查询
--返回本地服务器中定义的链接服务器列表. EXEC sys.sp_linkedservers /* 创建或更新 SQL Server 本地实例上的登录名与远程服务器中安全帐户之间的映射. 当用户登录 ...
- (转)Spring事务管理(详解+实例)
文章转自:http://blog.csdn.net/trigl/article/details/50968079 写这篇博客之前我首先读了<Spring in action>,之后在网上看 ...
- window如何一键关闭所有进程程序
1.桌面创建一个快捷方式,点击鼠标右键跳出的菜单=> 新建=>快捷方式 2. 在“请键入对象的位置(T)”下方的文本框中输入: taskkill /F /FI "USERNAME ...