前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >🥬🐕 node的第一个接口:注册

🥬🐕 node的第一个接口:注册

作者头像
用户4793865
发布2023-01-12 15:36:52
1.2K0
发布2023-01-12 15:36:52
举报
文章被收录于专栏:前端小菜鸡yym前端小菜鸡yym

这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

新建node项目

新建一个文件夹

代码语言:javascript
复制
npm init 

生成package.json现在就可以使用npm了。

入口文件

生成 server.js入口文件

代码语言:javascript
复制
touvh server.js

express

我们想要实现http通信 就要使用 express

安装express

代码语言:javascript
复制
 npm i express

此时可以发现node_modules文件出现了。因为有了依赖

热插拔

我们如果不使用它每次修改都要重启,才能看到改动

代码语言:javascript
复制
npm install nodemon -g 

添加启动配置

  • npm run start 用于线上调试当然本地也可以使用
  • npm run server 用于我们本地调试,其启动的是 nodemon
代码语言:javascript
复制
"scripts": {
    "start": "node server.js",
    "server": "nodemon server.js"
  },
 

server.js

  • require 引入 express
  • 创建一个 express实例
  • get请求
  • 如果开发环境使用process.env.PORT 本地使用 5000
  • 监听5000端口 如果运行打印
代码语言:javascript
复制
const express = require('express')
const app = express()

app.get("/",(req,res)=>{
    res.send("Hello world")
})
const port = process.env.PORT || 5000

app.listen(port,()=>{
    console.log(`server running on ${port}`)
})

如果在控制台成功打印就说明连接上了

操作mongodb

mongodb安装如果是Mac的请看 这篇文章 操作mongodb的插件有很多,这里我们使用mongoose 安装插件

代码语言:javascript
复制
npm install mongoose

新建一个config文件夹 📂 ,然后建一个 keys.js文件

代码语言:javascript
复制
module.exports = {
    // 没有数据库和密码的本地服务 mine
    mongoURI : "mongodb://localhost/mine
}
代码语言:javascript
复制
// 引入mongoose
const mongoose = require('mongoose')
// 我们把数据的驱动连接URL 写到了另一个文件config文件架下的keys.js中
const db = require("./config/keys").mongoURI
// 连接 成功会打印
mongoose.connect(db).then(()=>{
    console.log("connected")
}).catch(err=> console.log(err))

写个测试接口

新建个文件夹 routes 其下面再建一个api。然后新建一个user.js文件

代码语言:javascript
复制
// 引入express
const express = require('express');
// 引入Router
const router = express.Router();
// 写个接口 返回json {'msg':'you are success'}
router.get("/test",(req,res)=>{
    res.json({'msg':'you are success'})
})
// 导出 router
module.exports = router;

在 server.js中引用 users.js

代码语言:javascript
复制
// 引入 users.js
const users = require('./routes/api/users')
// 使用router
app.use('/api/users',users);

在浏览器中输入路由 /api/users/test 端口是5000

image.png
image.png

新建模型

新建个文件夹models 在其下面新建个userModel.js

代码语言:javascript
复制
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)

然后在 users.js中引入

代码语言:javascript
复制
const User = require('../../models/userModel')

新建post请求

之前我们想要使用post请求,都需要安装body-parser。

代码语言:javascript
复制
npm install body-parser

但是现在express已经废弃了body-parser

image.png
image.png

然后我们这么写 注意app.use也是有顺序的,我们最好把它加载前面。 server.js

代码语言:javascript
复制
app.use(express.urlencoded({extended:false}))
app.use(express.json())

在 users.js 新建一个请求,我们测试一下,打印请求的body

代码语言:javascript
复制
router.post('/register',(req,res)=>{
    console.log(req.body)
})

然后用postman 发起一个请求

image.png
image.png

可以在我们的控制台中看到输出就是测试成功了。

image.png
image.png

完成注册接口

User是引入的我们刚才创建好的数据modal

密码加密

使用bcrypt

代码语言:javascript
复制
npm install bcrypt
代码语言:javascript
复制
router.post('/register',(req,res)=>{
    // console.log(req.body)
    // 查询数据库中是否有邮箱
    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.password,
                password : req.body.password
            })
            // 参数加密方式 10 
            bcrypt.genSalt(10, function(err, salt) {
                bcrypt.hash(newUser.password, salt, (err, hash)=>{
                    // err是异常  hash是加密后的
                    if(err) throw err;
                    newUser.password = hash;
                    newUser.save()
                           .then(user => res.json(user))  // 成功会返回一个user,然后我们response返回去就行了
                           .catch(err=> console.log(err))  // 如果失败得到一个catch
                });
            });
        }
    })

})

然后在postman试一试

image.png
image.png

再去MongoDB中查询一下

image.png
image.png

最后完整的代码

config/keys.js

代码语言:javascript
复制
module.exports = {
    // 没有数据库和密码的本地服务
    mongoURI : "mongodb://localhost/mine"
}

routes/api/users.js

代码语言:javascript
复制
const express = require('express');
const router = express.Router();
const User = require('../../models/userModel')
const bcrypt = require('bcrypt')
/**
 * $route  GET  /api/users/test
 * @desc 返回的请求的json数据
 * @access public
 */
router.get("/test", (req, res) => {
    res.json({ 'msg': 'you are success' })
})
/**
 * 
 * 
 */
router.post('/register',(req,res)=>{
    // console.log(req.body)
    // 查询数据库中是否有邮箱
    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.password,
                password : req.body.password
            })
            // 参数加密方式 10 
            bcrypt.genSalt(10, function(err, salt) {
                bcrypt.hash(newUser.password, salt, (err, hash)=>{
                    // err是异常  hash是加密后的
                    if(err) throw err;
                    newUser.password = hash;
                    newUser.save()
                           .then(user => res.json(user))  // 成功会返回一个user,然后我们response返回去就行了
                           .catch(err=> console.log(err))  // 如果失败得到一个catch
                });
            });
        }
    })

})
module.exports = router;

server.js

代码语言:javascript
复制
const express = require('express')
const mongoose = require('mongoose')
// 引入 users.js
const users = require('./routes/api/users')

const app = express()
//  DB config
const db = require("./config/keys").mongoURI
mongoose.connect(db).then(()=>{
    console.log("connected")
}).catch(err=> console.log(err))

app.get("/",(req,res)=>{
    res.send("Hello world")
})
// 
app.use(express.urlencoded({extended:false}))
app.use(express.json())

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




const port = process.env.PORT || 5001



app.listen(port,()=>{
    console.log(`server running on ${port}`)
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新建node项目
  • 入口文件
  • express
  • 热插拔
  • 添加启动配置
  • server.js
  • 操作mongodb
  • 写个测试接口
  • 新建模型
  • 新建post请求
  • 完成注册接口
  • 最后完整的代码
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档