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 οnclick="getUserList()">获取所有用户数据</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

 

转载于:https://www.cnblogs.com/zhangky/p/10281837.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js实现html模板继承,理解JavaScript中的原型和继承

本文主要讲了原型如何在JavaScript中工作&#xff0c;以及如何通过[Prototype]所有对象共享的隐藏属性链接对象属性和方法&#xff1b;以及如何创建自定义构造函数以及原型继承如何工作以传递属性和方法值。介绍JavaScript是一种基于原型的语言&#xff0c;这意味着对象属性和方…

骁龙660是32位还是64位_高通发布骁龙 7c/8c 芯片,以后你可能会在电脑上看到它...

高通的芯片生意早已不局限于移动设备领域&#xff0c;而是进一步深入至 PC 市场。相比强调性能的 X86 芯片&#xff0c;以高通骁龙为代表的 ARM 系芯片则希望突出自己的优势&#xff0c;即更长的电池续航、无风扇设计和全天候的蜂窝网络连接。在骁龙技术峰会的第三天&#xff0…

css3之盒模型

什么是盒模型&#xff1f; css中的每个元素都是一个盒模型&#xff0c; 包括html body元素&#xff0c; 浏览器解析css的时候也会把每个元素看成一个盒子来解析。 盒模型具备的属性有&#xff1a; content 、padding 、margin、border 、background等 盒模型的分类&#xff1…

学计算机的误解,让人误解的六大专业

原标题&#xff1a;让人误解的六大专业隔行如隔山&#xff0c;很多人喜欢看名字猜专业&#xff0c;所以导致很多大学专业被人误解。其实了解一个专业不能仅仅凭借它的名字&#xff0c;也不能断章取义&#xff0c;只取片面意思。接下来就让我们来了解一下有哪些被人误解的专业吧…

杂项:轮询

ylbtech-杂项&#xff1a;轮询1.返回顶部 1、轮询&#xff08;Polling&#xff09;是一种CPU决策如何提供周边设备服务的方式&#xff0c;又称“程控输出入”&#xff08;Programmed I/O&#xff09;。轮询法的概念是&#xff0c;由CPU定时发出询问&#xff0c;依序询问每一个周…

js和css实现手机横竖屏预览思路整理

实现效果&#xff0c;如上图。 首先&#xff0c;实现手机页面在PC端预览&#xff0c; 则先在网上找到一个手机的背景图片&#xff0c;算好大概内间距&#xff0c;用来放预览的页面&#xff0c;我这里是给手机预览页面的尺寸按iphone5的尺寸来的&#xff1b; 一个手机页面在这里…

thinkphp日志泄漏漏洞_【Windows高危漏洞预警】CVE20200601,影响关键加密功能

一、事件报告2020年伊始&#xff0c;NSA发现了一个影响Microsoft Windows加密功能的严重漏洞(CVE-2020-0601)。证书验证漏洞允许攻击者破坏Windows验证加密信任的方式&#xff0c;并且可以启用远程代码执行。该漏洞会影响Windows 10和Windows Server 2016/2019以及依赖Windows的…

第一章计算机网络概述答案,第一章 计算机网络概述[3]

1-07 试在下列条件下比较电路交换和分组交换。要传送的报文共x(bit)。从源站到目的站共经过k段链路&#xff0c;每段链路的传播时延为d(s)&#xff0c;数据率为b(b/s)。在电路交换时电路的建立时间为S(s)。在分组交换时分组长度为p(bit)&#xff0c;且各结点的排队等待时间可忽…

最小路径算法(Dijkstra算法和Floyd算法)

1.单源点的最短路径问题&#xff1a;给定带权有向图G和源点v&#xff0c;求从v到G中其余各顶点的最短路径。 我们用一个例子来具体说明迪杰斯特拉算法的流程。 定义源点为 0&#xff0c;dist[i]为源点 0 到顶点 i 的最短路径。其过程描述如下&#xff1a; 步骤dist[1]dist[2]di…

matlab tsai手眼标定程序代码_标定系列一 | 机器人手眼标定的基础理论分析

旷视MegMaster机器人系列是旷视自主研发的一系列AI智能机器人硬件设备&#xff0c;基于旷视全球领先的人工智能算法及机器人技术&#xff0c;可实现搬运、分拣、托举、存储等功能&#xff0c;被广泛应用于物流仓储、工厂制造等场景。旷视SLAM组主要负责多传感器建图、定位、标定…

Java8中的外观(JavaFX8)

JavaFX8在外观方面进行了一些更改 &#xff0c;其中最相关的是新CSS API &#xff0c;它允许您为控件以及已公开的Skin类创建新CSS属性和伪类。 使用CSS可以改变控件的很多外观&#xff0c;但是CSS只能实现很多功能&#xff0c;而这正是Skin类的用处。从“ UI控件体系结构”快…

600分理科选计算机专业,天津600分左右,计算机或电子信息专业,怎么选院校?...

原标题&#xff1a;天津600分左右&#xff0c;计算机或电子信息专业&#xff0c;怎么选院校&#xff1f;想学计算机或电子信息&#xff0c;一定是偏理选科对吧&#xff01;所谓的换算&#xff0c;是指的高考后出了全天津市不分文理的总排名后&#xff0c;如何换算成相当于天津市…

[TypeScript] Export public types from your library

If youre a library author, its useful to expose your public types as interfaces, to allow your consumers to extend them if needed. For example: To resolve the issues, we can do : // typings.d.tsinterface JQuery {hideChildren(): JQuery } 转载于:https://www.…

python tkinter选择路径控件_Python3 Tkinter选择路径功能的实现方法

效果基于Python3。 在自己写小工具的时候因为这个功能纠结了一会儿&#xff0c;这里写个小例子&#xff0c;供有需要的参考。 小例子&#xff0c;就是点击按钮打开路径选择窗口&#xff0c;选择后把值传给Entry输出。 效果预览 这是选择前&#xff1a;选择&#xff1a;选择后&a…

小米10pro使用说明书_华为Mate40、华为P40和小米10拍照对比:哪一款最好?

华为Mate 40 Pro、华为P40 Pro和小米10 Pro拍照对比&#xff1a;哪一款最好&#xff1f;华为Mate 40 Pro、小米10至尊纪念版、华为P40 Pro和小米10 Pro三款手机是在DxOMark上排名靠前的4部手机。而我们刚好拥有华为Mate 40 Pro、华为P40 Pro和小米10 Pro三款手机——作为同样搭…

xml和xml解析

1.简介XML XML 可扩展标记语言&#xff0c;传输数据 HTML超文本标记语言&#xff0c;显示数据 XML 文档声明 只能放在第一行&#xff0c;注释不能放在声明之前 <?xml version"1.0" encoding"UTF-8" standalone"no"?> standalone表示文…

win8.1 计算机 桌面快捷方式,win8.1操作系统中我的电脑在哪里?win8.1我的电脑快捷键添加方法介绍...

很多刚刚接触win8的用户会发现&#xff0c;xp中的“我的电脑”&#xff0c;win7中的“计算机”&#xff0c;到了win8难道只有“资源管理器”了吗&#xff1f;开始菜单里边倒是有“计算机”&#xff0c;但是无法放到桌面。在最新版的win8.1中也是如此&#xff0c;大家会发现熟悉…

mac你没有权限打开应用程序_如何管理Mac的隐私权限控制

在使用MAC电脑清理软件的时候&#xff0c;经常会出现需要权限问题&#xff0c;在没有权限的情况下&#xff0c;我们不能对一些文件进行更改和删除&#xff0c;那么该如何管理Mac的隐私权限控制呢&#xff1f;下面的文章就来告诉大家该如何设置隐身权限问题。第一步&#xff1a;…

Linux网卡绑定

很多情况下我们都需要用到网卡绑定这中情况&#xff0c;例如&#xff1a;大数据传输备份、网卡冗余。使用网卡绑定可以提高网络的传输速度&#xff0c;并且还能保证网络安全性&#xff0c;做到网卡的高可用&#xff0c;甚至可以节省IP地址。 网卡绑定模式 mode0&#xff1a;轮询…

c# 中通快递对接_快递共配是什么?行业前景怎么样?

首先了解快递共配是什么&#xff0c;随着快递市场竞争的加剧&#xff0c;降本增效成为快递网点越来越重视的方面&#xff0c;末端整合就成为快递网点普遍关注的一个焦点&#xff0c;即大家通常所说的共配。如何提升快递末端效率&#xff0c;一直都是快递企业比较关心的话题。不…