使用node和express+mongodb实现数据增删改功能-阿里云开发者社区

开发者社区> 小周sir> 正文

使用node和express+mongodb实现数据增删改功能

简介: 使用node和express+mongodb实现数据增删改功能
+关注继续查看

​ 今天小编就写一遍关于node写接口的文档,会从环境搭建,数据库链接,数据模型,接口文档以及到测试,一步一步的来,尽最大可能写好,让每一位读者都能看懂,文章可能过程,希望慢慢理解

   2018最后的一篇博客,希望在2019继续努力

1.准备工作

postman接口测试工具,
node安装
mlab数据存储
mongodb数据库
2.node + express环境搭建

2.1环境搭建之前,首先要检查自己电脑是否安装node环境,如果没有安装,先安装node环境.

2.2在自己电脑创建一个目录文件,打开自己终端,先进行初始化 cnpm init(在这里使用了cnpm国内镜像,如果没有安装,请自行安装cnpm);

初始化之后会出现下面这个界面,会在我们的文件中生成一个package.json文件;

image.png

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,就可以查看运行的结果了
image.png

 2.6但是我们每次修改代码的时候都要重新运行node app.js,这个时候我们只需要安装nodemon,监听node变化的一个工具

cnpm install nodemon -g 在这里是全局安装
2.7:配置package.json启动命令,在开发环境的时候,直接可以通过cnpm run app来监听每次修改node的变化,nodemon我们已经全局安装过了,可以在任何地方都可以使用,只要我们每次修改代码都会发生变化,这样我们就不会手动输入命令了

image.png

image.png

3.数据库mlab创建

3.1:mlab是MongoDB提供的免费存储的数据库,使用的时候必须先注册,才可以使用,这个mlab需要翻墙注册,注册登录之后会出现下面的界面
image.png

3.2然后点击Create  new 创建   》》》》  然后选择下面的两个,amazon和SANDBOX最后点击右下角CONTINUE,会跳转下一步

3.3在这个界面选择国家地区,选择US EAST和Europe都可以,然后点击CONTINUE,会跳转下一步

3.4在这个界面,需要我们输入一个名字,名字随便输入,然后点击CONTINUE,会跳转下一步,

image.png

3.5在下一个页面,然后在点击SUBMIT ORDER,这样我们就创建好一个数据库,然后点击进入数据库中

image.png

3.6进入我的数据库中,黄色警告提示我们需要创建一个用户信息,也就是我们最后链接的用户名和密码,点击add会弹出一个框,然后我门添加用户名和密码就可以了,最后点击CREATE,这样我们的数据库就已经创建完成了,接下来我们可以使用node链接我们的数据库了

image.png

4.node链接MongoDB

4.1安装mongoose链接数据库

cnpm install mongoose
4.2然后在你的入口文件引入(app.js),

const mongoose require('mongoose')
4.3在我们的根目录创建一个config文件,在confing中创建一个db.js文件,这个文件存放我们的数据库的地址,连接数据库的地址放在一个单独的文件,把我们服务器的地址引入过了就行了,修改用户名和密码就行了,

image.png

4.4使用mongoose链接数据库,在我们的根目录引入config下面的db文件。然后通过mongoose链接数据,最后在控制台可以看到我们已经链接成功了,到现在为止,数据已经链接配置好了,接下来接开始写接口

image.png

5.接口路由搭建和数据模型

5.1在我们的根目录下创建一个router >>> api >>> useinfo.js文件,这个用于存放我们的请求接口的路由文件;

  5.1.1在userinfo文件中引入express和路由,先写一个get请求方法,

image.png

  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,就能看到我们请求的结果是否正确了

image.png

5.3创建数据模型

5.3.1创建我们的数据模型用于存放数据字段名。在根目录创建models文件,然后创建Userinfo.js文件,用于写数据字段模型。

创建了name,age,sex,address,date几个字段名,(使用什么字段创建什么字段,在这里先使用这么多)

mongoose.Schema是一个MongoDB对象建模工具,

每一个Schema对应一个mongoDB collection 并且在那个collection里面定义了documents的模型。
image.png

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,就可以看到我们添加数据的字段了。

image.png

image.png

5.5获取所有数据

5.5.1通过get请求,获取数据库中所有的数据信息
image.png

// $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,就可以获取到我们数据库中所需要的信息

image.png
image.png

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中可以看到我们成功更新数据
image.png

image.png

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,成功姓名为张飞的数据删除成功

image.png

image.png

以上都是我们使用node+express实现的数据的添加,删除,修改功能

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用node.js获取图片的base64编码
把百度的logo保存到桌面进行测试,得到的编码为: R0lGODlhdQAmAKIAAOYyL+rU4llg6Jmd8e92dCky4eEGAv///yH5BAAAAAAALAAAAAB1ACYAAAP/eLrc/jC2IEoZMATJu/9gyFVWIUyksIls677LUJbrEcxW...
625 0
08.Eclipse下Ndk开发(使用fmod实现QQ变声功能)
(创建于2017/12/30) 1.编写native package org.fmod.example; public class EffectUtils { //音效的类型 public static final int ...
875 0
Android Studio 通过一个登录功能介绍SQLite数据库的使用
前言:         SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
4151 0
Excel中添加并使用宏实现批量更新数据
一、状况描述    当我们需要后台更新大量数据的时候,可以使用该功能。二、解決方案    (1)新建一个Excel文件,并另存为启用宏的Excel工作簿,扩展名为.xlsm。    (2)在Excel中添加按钮。
1096 0
使用Verilog实现FPGA偶数/奇数分频电路设计并使用modelsim仿真
本人地大14级师兄,如果有学弟学妹搜到这个评论一个呗! 一、设计要求 编写VerilogHDL程序,实现如下功能: 输入时钟信号和复位/信号,实现4分频/5分频,占空比为1:1.   二、设计思路 1.偶数分频 假设为N分频,计数到N/2-1时,时钟翻转、计数清零,如此循环就可以得到N(偶)分频   2.奇数分频(占空比为50%) (1)假设为N分频,取一个进行上升沿触发的模N计数,触发时钟翻转后,经过(N-1)/2再次进行翻转,得到一个占空比非50%奇数N频时钟。
1679 0
+关注
小周sir
面对过去,不要迷离;面对未来,不必彷徨;
50
文章
41
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载