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

目录

  • 准备工作
    • 下载安装Postman
  • mongodb连接串配置
    • GET请求测试
      • 注册接口搭建
        • 创建User数据模型
        • 使用body-parser中间件
        • POST请求测试
        • 使用User数据模型
        • 使用gravatar处理头像

      准备工作 申请一个免费的MongoDB
      https://www.mlab.com注册申请一个500M的MongoDB数据库。登录后手动在创建Databases下的Collections中手动创建一个数据库node_app。
      在个人首页点击Connect获取node.js连接MongoDB数据库的字符串为
      mongodb+srv://:@cluster0.ylpaf.mongodb.net/node_app

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

      下载安装Postman
      https://www.postman.com/注册一个账号,下载安装Postman agent,即可方便地进行GET/POST/PUT等测试。
      【node.js+postman+mongodb搭建测试注册接口的实现】
      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://:@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 5000MongoDB connected.

      数据库连接正常。

      GET请求测试 创建路由文件
      C:\Users\xiaoming\source\repos\node_demo\node_app\routes\api\users.js

      编辑users.js并添加GET请求:
      // login & registtrationconst 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!"); })// 使用usersapp.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 Schemaconst 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 & registtrationconst 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中填入测试内容:
      KEYVALUEemailharlie@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 & registtrationconst 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 existsUser.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 passwordbcrypt.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中填入测试内容:
      emailgodfrey@eldenring.comnamegodfreypassword123456

      查看测试输出
      {"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 & registtrationconst 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 existsUser.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 passwordbcrypt.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中填入测试内容:
      emailgodfrey@eldenring.comnamegodfreypassword123456

      测试会返回报错
      {"email": "Email already registered!"}

      在KEY和VALUE中填入测试内容:
      emailmohg@eldenring.comnamemohgpassword123456

      测试返回
      {"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注册接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

        推荐阅读