node.js+postman+mongodb搭建测试注册接口的实现

 更新时间:2022年06月14日 10:43:12   作者:GottdesKrieges  
本文主要介绍了node.js+postman+mongodb搭建测试注册接口的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

准备工作

申请一个免费的MongoDB

https://www.mlab.com注册申请一个500M的MongoDB数据库。登录后手动在创建Databases下的Collections中手动创建一个数据库node_app。

在个人首页点击Connect获取node.js连接MongoDB数据库的字符串为

mongodb+srv://<username>:<password>@cluster0.ylpaf.mongodb.net/node_app

将其中<username>:<password>修改为自己设定的数据库用户名和密码。

下载安装Postman

https://www.postman.com/注册一个账号,下载安装Postman agent,即可方便地进行GET/POST/PUT等测试。

mongodb连接串配置

安装mongoose用于连接数据库:

> npm install mongoose
> 
> cd C:\Users\xiaoming\source\repos\node_demo\node_app
> mkdir config
> cd config
> new-item keys.js -type file

编辑keys.js配置连接串:

module.exports = {
    mongoURI: "mongodb+srv://<username>:<password>@cluster0.ylpaf.mongodb.net/node_app"
}

编辑server.js入口文件:

const express = require("express");
const mongoose = require("mongoose");

const app = express();
const db = require("./config/keys").mongoURI;

mongoose.connect(db)
        .then(() => console.log("MongoDB connected."))
        .catch(err => console.log(err));

app.get("/", (req, res) => {
    res.send("Hello World!");
})

const port = process.env.PORT || 5000;
app.listen(port, () => {
    console.log(`Server running on port ${port}`);
})

检查是否能连接到数据库:

> nodemon server.js

[nodemon] 2.0.16
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node server.js`
Server running on port 5000
MongoDB connected.

数据库连接正常。

GET请求测试

创建路由文件

C:\Users\xiaoming\source\repos\node_demo\node_app\routes\api\users.js

编辑users.js并添加GET请求:

// login & registtration
const express = require("express");
const router = express.Router();

router.get("/test", (req,res) => {
    res.json({msg:"Login succeeded!"})
})

module.exports = router;

编辑server.js,导入并使用users.js:

const express = require("express");
const mongoose = require("mongoose");

const app = express();
const users = require("./routes/api/users"); 

const db = require("./config/keys").mongoURI;
mongoose.connect(db)
    .then(() => console.log("MongoDB connected."))
    .catch(err => console.log(err));

// 设置app路由
app.get("/", (req, res) => {
    res.send("Hello World!");
})

// 使用users
app.use("/api/users", users);

const port = process.env.PORT || 5000;
app.listen(port, () => {
    console.log(`Server running on port ${port}`);
})

访问

http://localhost:5000/api/users/test

可以看到

{"msg":"Login succeeded!"}

注册接口搭建

创建User数据模型

创建用户数据模型文件

C:\Users\xiaoming\source\repos\node_demo\node_app\models\User.js

编辑User.js创建用户数据模型:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

// create Schema
const UserSchema = new Schema({
    name:{
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    avatar: {
        type: String
    },
    date: {
        type: Date,
        default: Date.now
    },
})

module.exports = User = mongoose.model("users", UserSchema);

使用body-parser中间件

安装body-parser中间件,可以方便地处理HTTP请求。

> npm install body-parser

编辑server.js使用body-parser:

const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");

const app = express();
const users = require("./routes/api/users"); 

const db = require("./config/keys").mongoURI;

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

mongoose.connect(db)
    .then(() => console.log("MongoDB connected."))
    .catch(err => console.log(err));

app.get("/", (req, res) => {
    res.send("Hello World!");
})

app.use("/api/users", users);

const port = process.env.PORT || 5000;
app.listen(port, () => {
    console.log(`Server running on port ${port}`);
})

POST请求测试

编辑users.js增加POST请求:

// @login & registtration
const express = require("express");
const router = express.Router();

/*
 * $route GET /api/users/test
 * @desc return requested json data
 * @access public
 */
router.get("/test", (req,res) => {
    res.json({msg:"Login succeeded!"})
})

/*
 * $route POST /api/users/register
 * @desc return requested json data
 * @access public
 */
router.post("/register", (req, res) => {
    console.log(req.body);
})

module.exports = router;

POST中暂时只有一个打印请求体的操作。

在Postman中的Workspace中测试:

POST http://localhost:5000/api/users/register

Body选择x-www-form-urlencoded,在KEY和VALUE中填入测试内容:

KEY         VALUE
email    harlie@google.com

查看终端输出:

Server running on port 5000
MongoDB connected.
[Object: null prototype] { email: 'harlie@google.com' }

说明成功获取到了req.body。

使用User数据模型

首先安装bcrypt包。bcrypt可以用来加密注册用户的密码,避免在数据库中存储明文密码。在https://www.npmjs.com/上可以查看bcrypt包的用法介绍。

> npm install bcrypt

编辑users.js引入并使用User数据模型:

// @login & registtration
const express = require("express");
const router = express.Router();
const bcrypt = require("bcrypt");

const User = require("../../models/User.js");

/*
 * $route GET /api/users/test
 * @desc return requested json data
 * @access public
 */
router.get("/test", (req,res) => {
    res.json({msg:"Login succeeded!"})
})

/*
 * $route POST /api/users/register
 * @desc return requested json data
 * @access public
 */
router.post("/register", (req, res) => {
    //console.log(req.body);

    // check if email already exists
    User.findOne({ email: req.body.email })
        .then((user) => {
            if (user) {
                return res.status(400).json({ email: "邮箱已被注册!" })
            } else {
                const newUser = new User({
                    name: req.body.name,
                    email: req.body.email,
                    password: req.body.password
                })

                // encrypt newUser password
                bcrypt.genSalt(10, function (err, salt) {
                    bcrypt.hash(newUser.password, salt, (err, hash) => {
                        if (err) throw err;

                        newUser.password = hash;
                        newUser.save()
                            .then(user => res.json(user))
                            .catch(err => console.log(err));
                    });
                });
            }
        })
})

module.exports = router;

在Postman中的Workspace中测试POST http://localhost:5000/api/users/register。Body选择x-www-form-urlencoded,在KEY和VALUE中填入测试内容:

email     godfrey@eldenring.com
name      godfrey
password  123456

查看测试输出

{
    "name": "godfrey",
    "email": "godfrey@eldenring.com",
    "password": "$2b$10$hoGzFeIdZyCwEotsYhxEheoGNOCE4QnYYh/WkKoGkuPT0xZI9H10C",
    "_id": "62a4482c00990937d819ea6d",
    "date": "2022-06-11T07:45:48.437Z",
    "__v": 0
}

打开mongodb,在DATABASES下的node_app中查看,会发现多出了一个users的Collection,其中刚好存储了上面我们刚通过POST请求插入的一条数据。

使用gravatar处理头像

https://www.npmjs.com/package/gravatar中查看gravatar的使用方法。

安装gravatar

> npm i gravatar

编辑users.js增加注册头像(avatar)处理:

// @login & registtration
const express = require("express");
const router = express.Router();
const bcrypt = require("bcrypt");
const gravatar = require("gravatar");

const User = require("../../models/User.js");

/*
 * $route GET /api/users/test
 * @desc return requested json data
 * @access public
 */
router.get("/test", (req,res) => {
    res.json({msg:"Login succeeded!"})
})

/*
 * $route POST /api/users/register
 * @desc return requested json data
 * @access public
 */
router.post("/register", (req, res) => {
    //console.log(req.body);

    // check if email already exists
    User.findOne({ email: req.body.email })
        .then((user) => {
            if (user) {
                return res.status(400).json({ email: "Email already registered!" })
            } else {
                const avatar = gravatar.url(req.body.email, { s: '200', r: 'pg', d: 'mm' });

                const newUser = new User({
                    name: req.body.name,
                    email: req.body.email,
                    avatar,
                    password: req.body.password
                })

                // encrypt newUser password
                bcrypt.genSalt(10, function (err, salt) {
                    bcrypt.hash(newUser.password, salt, (err, hash) => {
                        if (err) throw err;

                        newUser.password = hash;
                        newUser.save()
                            .then(user => res.json(user))
                            .catch(err => console.log(err));
                    });
                });
            }
        })
})

module.exports = router;

在Postman中的Workspace中测试POST http://localhost:5000/api/users/register,Body选择x-www-form-urlencoded。

在KEY和VALUE中填入测试内容:

email     godfrey@eldenring.com
name      godfrey
password  123456

测试会返回报错

{
    "email": "Email already registered!"
}

在KEY和VALUE中填入测试内容:

email      mohg@eldenring.com
name       mohg
password   123456

测试返回

{
    "name": "mohg",
    "email": "mohg@eldenring.com",
    "password": "$2b$10$uSV2tmA5jH6veLTz1Lt5g.iD5QKtbJFXwGsJilDMxIqw7dZefpDz.",
    "avatar": "//www.gravatar.com/avatar/c5515cb5392d5e8a91b6e34a11120ff1?s=200&r=pg&d=mm",
    "_id": "62a44f12d2c5293f0b8e9c2b",
    "date": "2022-06-11T08:15:14.410Z",
    "__v": 0
}

在浏览器中打开

www.gravatar.com/avatar/c5515cb5392d5e8a91b6e34a11120ff1?s=200&r=pg&d=mm

到此这篇关于node.js+postman+mongodb搭建测试注册接口的实现的文章就介绍到这了,更多相关node postman mongodb注册接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用node.js实现自动生成前端项目组件的方法详解

    利用node.js实现自动生成前端项目组件的方法详解

    最近在学习用,基于nodejs的强大,我从原本的只写前端变成了写全栈。下面这篇文章主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧。
    2017-07-07
  • node.js部署之启动后台运行forever的方法

    node.js部署之启动后台运行forever的方法

    今天小编就为大家分享一篇node.js部署之启动后台运行forever的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • node.js基础知识小结

    node.js基础知识小结

    本文给大家汇总介绍了学习node.js的一些关于开发环境的基础知识,非常简单,给新手们参考下
    2018-02-02
  • nodejs连接ftp上传下载实现方法详解【附:踩坑记录】

    nodejs连接ftp上传下载实现方法详解【附:踩坑记录】

    这篇文章主要介绍了nodejs连接ftp上传下载实现方法,结合实例形式详细分析了node.js使用ftp模块实现针对ftp上传、下载相关操作的方法,并附带记录了传输速度慢的解决方法,需要的朋友可以参考下
    2023-04-04
  • 用node-webkit把web应用打包成桌面应用(windows环境)

    用node-webkit把web应用打包成桌面应用(windows环境)

    这篇文章主要介绍了windows环境下用node-webkit把web应用打包成桌面应用的教程,需要的朋友可以参考下
    2018-02-02
  • Node.js v8.0.0正式发布!看看带来了哪些主要新特性

    Node.js v8.0.0正式发布!看看带来了哪些主要新特性

    Node.js v8.0.0 已正式发布。v8.0.0 是下一个主要的版本,带来了一系列重大的变化和新功能,内容十分多!下面这篇文章主要带着大家一起看看Node.js v8.0.0带来了哪些主要新特性,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • 详解50行代码,Node爬虫练手项目

    详解50行代码,Node爬虫练手项目

    这篇文章主要介绍了50行代码,Node爬虫练手项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 如何在node环境实现“get数据解析”代码实例

    如何在node环境实现“get数据解析”代码实例

    这篇文章主要介绍了如何在node环境实现“get数据解析”代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • node.js中的fs.futimes方法使用说明

    node.js中的fs.futimes方法使用说明

    这篇文章主要介绍了node.js中的fs.futimes方法使用说明,本文介绍了fs.futimes方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • pnpm的安装及其使用教程(汇总)

    pnpm的安装及其使用教程(汇总)

    pnpm是 Node.js 的替代包管理器,它是 npm 的直接替代品,速度更快、效率更高,它由 npm/yarn 衍生而来,但却解决了 npm/yarn 内部潜在的 bug,并且极大了地优化了性能,本文给大家介绍pnpm的安装及其使用,感兴趣的朋友一起看看吧
    2023-12-12

最新评论