0


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

准备工作

申请一个免费的MongoDB

https://www.mlab.com

注册申请一个500M的MongoDB数据库。登录后手动在创建Databases下的Collections中手动创建一个数据库node_app。

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

1

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

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

下载安装Postman

https://www.postman.com/

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

mongodb连接串配置

安装mongoose用于连接数据库:

1

2

3

4

5

6

> 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配置连接串:

1

2

3

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

编辑server.js入口文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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}`);
})

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

1

2

3

4

5

6

7

8

9

> 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请求测试

创建路由文件

1

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

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

1

2

3

4

5

6

7

8

9

// 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:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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}`);
})

访问

1

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

可以看到

1

{"msg":"Login succeeded!"}

注册接口搭建

创建User数据模型

创建用户数据模型文件

1

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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请求。

1

> npm 
install
body-parser

编辑server.js使用body-parser:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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请求:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

// @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中测试:

1

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

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

1

2

KEY         VALUE
email    [email protected]

查看终端输出:

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

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

使用User数据模型

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

1

> npm 
install
bcrypt

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

// @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中填入测试内容:

1

2

3

email     [email protected]
name      godfrey
password  123456

查看测试输出

1

2

3

4

5

6

7

8

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

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

使用gravatar处理头像

在gravatar - npm中查看gravatar的使用方法。

安装gravatar

1

> npm i gravatar

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

// @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中填入测试内容:

1

2

3

email     [email protected]
name      godfrey
password  123456

测试会返回报错

1

2

3

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

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

1

2

3

email      [email protected]
name       mohg
password   123456

测试返回

1

2

3

4

5

6

7

8

9

{
    
"name"
: 
"mohg"
,
    
"email"
: 
"[email protected]"
,
    
"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
}
​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】


本文转载自: https://blog.csdn.net/m0_70669463/article/details/135020001
版权归原作者 wanan安 所有, 如有侵权,请联系我们删除。

“node.js+postman+mongodb搭建测试注册接口的实现”的评论:

还没有评论