使用node和express+mongodb实现数据增删改功能
2018即将过去,2019即将来临,前端技术不断在在更新,学的东西越来越多。我们只有不断的学习,才不能被淘汰。在前后端分离的一个时代,后端提供接口,前端调用接口,逻辑判断,每个都是独立的工作。如果自己在空余的时间,想学习新的知识,却没有好的接口,只能写写假的json数据。或者网上开源的数据库,mock,野狗数据库,firebase,或者使用本地的json-server搭建本地数据库使用也是完全没有问题的,也可以正常的实现数据的接口请求。
今天小编就写一遍关于node写接口的文档,会从环境搭建,数据库链接,数据模型,接口文档以及到测试,一步一步的来,尽最大可能写好,让每一位读者都能看懂,文章可能过程,希望慢慢理解
2018最后的一篇博客,希望在2019继续努力
1.准备工作
- postman接口测试工具,
- node安装
- mlab数据存储
- mongodb数据库
2.node + express环境搭建
2.1环境搭建之前,首先要检查自己电脑是否安装node环境,如果没有安装,先安装node环境.
2.2在自己电脑创建一个目录文件,打开自己终端,先进行初始化 cnpm init(在这里使用了cnpm国内镜像,如果没有安装,请自行安装cnpm);
初始化之后会出现下面这个界面,会在我们的文件中生成一个package.json文件;
2.3在自己根目录创建一个入口文件,app.js文件或者通过终端命令touch app.js创建一个文件,
2.4这时候我们可以搭建服务器环境,但是需要依赖express,这时候我们就需要安装express
cnpm install express
2.5工作环境准备好之后,需要在我们的入口文件引入express,并创建一个app实列,请看下面,
2.5.1:port是我们的端口号,app.listen是监听端口号运行
2.5.2:然后通过node app.js运行,查看服务器是否正常运行成功,然后在浏览器出入http://localhost:5000,就可以查看运行的结果了
2.6但是我们每次修改代码的时候都要重新运行node app.js,这个时候我们只需要安装nodemon,监听node变化的一个工具
cnpm install nodemon -g 在这里是全局安装
2.7:配置package.json启动命令,在开发环境的时候,直接可以通过cnpm run app来监听每次修改node的变化,nodemon我们已经全局安装过了,可以在任何地方都可以使用,只要我们每次修改代码都会发生变化,这样我们就不会手动输入命令了
3.数据库mlab创建
3.1:mlab是MongoDB提供的免费存储的数据库,使用的时候必须先注册,才可以使用,这个mlab需要FQ注册,注册登录之后会出现下面的界面
3.2然后点击Create new 创建 》》》》 然后选择下面的两个,amazon和SANDBOX最后点击右下角CONTINUE,会跳转下一步
3.3在这个界面选择国家地区,选择US EAST和Europe都可以,然后点击CONTINUE,会跳转下一步
3.4在这个界面,需要我们输入一个名字,名字随便输入,然后点击CONTINUE,会跳转下一步,
3.5在下一个页面,然后在点击SUBMIT ORDER,这样我们就创建好一个数据库,然后点击进入数据库中
3.6进入我的数据库中,黄色警告提示我们需要创建一个用户信息,也就是我们最后链接的用户名和密码,点击add会弹出一个框,然后我门添加用户名和密码就可以了,最后点击CREATE,这样我们的数据库就已经创建完成了,接下来我们可以使用node链接我们的数据库了
4.node链接MongoDB
4.1安装mongoose链接数据库
cnpm install mongoose
4.2然后在你的入口文件引入(app.js),
const mongoose require('mongoose')
4.3在我们的根目录创建一个config文件,在confing中创建一个db.js文件,这个文件存放我们的数据库的地址,连接数据库的地址放在一个单独的文件,把我们服务器的地址引入过了就行了,修改用户名和密码就行了,
4.4使用mongoose链接数据库,在我们的根目录引入config下面的db文件。然后通过mongoose链接数据,最后在控制台可以看到我们已经链接成功了,到现在为止,数据已经链接配置好了,接下来接开始写接口
5.接口路由搭建和数据模型
5.1在我们的根目录下创建一个router >>> api >>> useinfo.js文件,这个用于存放我们的请求接口的路由文件;
5.1.1在userinfo文件中引入express和路由,先写一个get请求方法,
5.2.2需要在我们的app.js文件引入userinfo.js文件,并使用router中间件,不然不会生效
/api/userinfo:这个相当于我们访问的接口地址
//引入userinfo.js const userinfo = require('./router/api/userinfo') //使用router中间件 app.use('/api/userinfo',userinfo)
然后就可以在浏览器输入http://localhost:5000/api/userinfo
5.2postman接口测试工具使用
5.2.1我们已经写好一个get的测试请求,接下来我们进行测试,我们可以通过postman这个工具进行测试,下载好之后需要登录注册,
下载好之后打开这个工具,第一步输入我们的地址,点击send,就能看到我们请求的结果是否正确了
5.3创建数据模型
5.3.1创建我们的数据模型用于存放数据字段名。在根目录创建models文件,然后创建Userinfo.js文件,用于写数据字段模型。
创建了name,age,sex,address,date几个字段名,(使用什么字段创建什么字段,在这里先使用这么多)
mongoose.Schema是一个MongoDB对象建模工具,
每一个Schema对应一个mongoDB collection 并且在那个collection里面定义了documents的模型。
5.4编写路由接口,实现数据的添加,删除,修改功能
在我们路由文件userinfo引入数据模型Userinfo文件,这样我们就可以查询数据库中是否有这些字段名了
const Userinfo =require('../../models/Userinfo')
5.4.1添加用户信息
添加用户信息肯定需要使用post去添加用户信息了,这时候我们需要安装第三方依赖body-parser
cnpm install body-parser
5.4.2在安装完之后,需要在app.js文件引入,并使用,这样我们就可以使用post进行数据存储了
const bodyParser = require('body-parser') //使用body-parser中间件 app.use(bodyParser.urlencoded({extended:false})); app.use(bodyParser.json());
5.4.3添加数据接口,。先创建一个空的对,判断数据是否存在,如果不存在的话,通过new Userinfo添加数据库中,Userinfo就是我们上面引入的模型
// $route GET api/userinfo/add // @desc 添加用户数据 // @access public router.post('/add',(req,res) => { const UserName = {}; if(req.body.name) UserName.name = req.body.name; if(req.body.sex) UserName.sex = req.body.sex; if(req.body.age) UserName.age = req.body.age; if(req.body.address) UserName.address = req.body.address; new Userinfo(UserName).save().then(user => { res.json(user); }); })
5.4.4使用postman接口测试,请求接口类型是post请求,输入我们的接口地址,添加字段,点击send,就可以看到我们添加数据的字段了。
5.5获取所有数据
5.5.1通过get请求,获取数据库中所有的数据信息
// $route GET api/userinfo // @desc 获取所有的数据 // @access public //find()是mongodb的数据库语法 router.get("/", (req,res) => { Userinfo.find().then(user => { if(!user) { return res.status(400).json("没有任何数据存在") } return res.json(user) }).catch(err => { return res.status(404).json(err) }) });
5.5.1通过postman测试接口,http://localhost:5000/api/userinfo,就可以获取到我们数据库中所有的信息了,
5.6获取单个用户信息
5.6.1:通过根据用户的id去获取单个用户的信息
// $route GET api/userinfo/:id // @desc 获取单个的数据 // @access public router.get('/:id',(req,res) => { Userinfo.findOne({_id:req.params.id}).then(user => { if(!user) { return res.status(400).json("没有任何数据存在") } return res.json(user) }).catch(err => { return res.status(404).json(err) }) })
5.6.2通过postman测试接口,http://localhost:5000/api/userinfo/5c27929b2a87821914f8b195,就可以获取到我们数据库中所需要的信息
5.7编辑用户信息
5.7.1编辑用户信息,也是根据用户的id去更新数据,通过monoose提供的findByIdAndUpdate去更新数据库
// $route GET api/userinfo/exit/:id // @desc 编辑用户信息 // @access public router.post('/exit/:id',(req,res) => { const UserName = {}; if(req.body.name) UserName.name = req.body.name; if(req.body.sex) UserName.sex = req.body.sex; if(req.body.age) UserName.age = req.body.age; if(req.body.address) UserName.address = req.body.address; //更新数据 Userinfo.findByIdAndUpdate({ _id: req.params.id }, { $set: UserName }, { new: true }) .then(user => { if (!user) { return res.status(400).json("数据不存在"); } res.json(user); }) .catch(err => { return res.status(404).json(err); }); })
5.7.2这是我们更新第一个字段的用户信息,把张三的名字改成张飞,在postman中可以看到我们成功更新数据
5.8删除用户信息
5.8.1在这里,我们只删除根据用户的id删除,不会实现全部删除。
// $route GET api/userinfo/delete/:id // @desc 删除用户信息 // @access public router.delete('/delete/:id',(req,res) => { Userinfo.findByIdAndRemove({_id:req.params.id}).then(user => { user.save().then(user => { res.json(user) }) }).catch(err => { return res.status(404).json(err) }) })
5.8.2我们通过postman测试http://localhost:5000/api/userinfo/delete/5c27929b2a87821914f8b195,成功姓名为张飞的数据删除成功
以上都是我们使用node+express实现的数据的添加,删除,修改功能。希望这篇博客能够帮助你。提前祝愿2019前端小伙伴元旦快乐,2019更上技术更上一层楼。