准备工作
申请一个免费的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%无套路免费领取】
版权归原作者 wanan安 所有, 如有侵权,请联系我们删除。