開門進山html
根據官方手冊,會使用插件 nodemail
,mongoose
。(本文使用了mongoose,用來存數據。若沒用到數據庫,可忽略與mongoose相關的內容)node
├── server.js // 服務入口 ├── db // 數據庫文件夾(沒使用mongoose能夠忽略) │ ├── model // │ │ └──userModel.js // 經過mongoose得到schema對象 │ └── connect.js // 連接數據庫 ├── router // 路由文件夾 │ └── userRouter.js // 路由接口 ├── utils // 工具文件夾 │ └── mail.js // 郵件發送插件
必要準備redis
其次使用node開發必定要有模塊思想。其實本文能夠在一個server.js中完成,模塊化處理有利於提升開發效率和下降維護成本。mongodb
首先 創建一個服務,連接數據庫,引入路由數據庫
const express = require('express') const app = express() const db = require('./db/connect') // 連接數據庫 var bodyParser = require('body-parser') app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) // 這三行爲解析接口傳參 // 引入路由 const userRouter = require('./router/userRouter') app.use('/user', userRouter) app.listen(3000, ()=> { console.log('server start') })
使用方法就是官方demo (系統記得安裝MongoDB)express
// 連接數據庫 const mongoose = require('mongoose') mongoose.connect('mongodb://localhost/chenjingtest',{useNewUrlParser: true,useUnifiedTopology: true}) // 連接數據庫 var db = mongoose.connection // 數據庫的連接對象 db.on('error', console.error.bind(console, 'connection error:')) db.once('open', function() { console.log('數據庫連接成功') // we're connected! })
新建一個shecma對象
更多理解能夠移步mongoose手冊npm
const mongoose = require('mongoose') var Schema = mongoose.Schema // 經過mongoose得到schema對象 var userSchema = new Schema({ us: { type: String, required: true }, ps: { type: String, required: true }, age: Number, sex: { type: Number, default: 0 } }) var User = mongoose.model('user', userSchema) // 該數據對象和集合關聯('集合名', schema對象) module.exports = User
const express = require('express') const router = express.Router() const User = require('../db/model/userModel') // 引入 const mailSend = require('../utils/mail') let codes = {} // 咱們這個例子 驗證碼就放着內存中了。正常開發也能夠放redis 或者 數據庫內 /** * @api {post} /user/reg 用戶註冊 * @apiName 用戶註冊 * @apiGroup User * * @apiParam {String} us 用戶名 * @apiParam {String} ps 用戶密碼 * @apiParam {String} code 郵箱驗證碼 * * @apiSuccess {String} firstname Firstname of the User. * @apiSuccess {String} lastname Lastname of the User. */ router.post('/reg', (req, res) => { // 獲取數據 let { us, ps, code } = req.body // server.js中沒有解析傳參工具的話 會報錯 if (us && ps && code) { // 判斷驗證碼是否ok if (!(codes[us] === Number(code))) { // 郵箱做爲用戶名 return res.send({err: -4, msg: '驗證碼錯誤'}) } User.find({us}).then((data) => { if (!data.length) { // 用戶名不存在 能夠註冊 return User.insertMany({ us: us, ps: ps}) // 註冊成功 將數據寫入數據庫 } else { res.send({err: -3, msg: '用戶名已存在'}) } }).then(() => { res.send({ err: 0, msg: '註冊成功'}) }).catch(err => { res.send({ err: -2, msg: '註冊失敗'}) }) } else { return res.send({err: -1, msg: '參數錯誤'}) } // 數據處理 // 返回數據 // res.send('test ok') }) /** * @api {post} /user/login 登陸 * @apiName 登陸 * @apiGroup User * * @apiParam {String} us 用戶名 * @apiParam {String} ps 用戶密碼 * * @apiSuccess {String} firstname Firstname of the User. * @apiSuccess {String} lastname Lastname of the User. */ router.post('/login', (req, res) => { console.log(req.body) let { us, ps } = req.body console.log(us, ps) if (us && ps) { // User.find({ us, ps }).then((data) => { if (data.length > 0) { res.send({err: 0, msg: '登陸成功'}) } else { res.send({err: -2, msg: '用戶名或者密碼不正確'}) } }).catch(err => { // res.send({ err: -2, msg: '註冊失敗'}) return res.send({err: -1, msg: '內部錯誤'}) }) } else { return res.send({err: -1, msg: '參數錯誤'}) } }) // 發送郵件驗證碼 /** * @api {post} /user/login 郵箱驗證碼發送 * @apiName 郵箱驗證碼發送 * @apiGroup User * * @apiParam {String} mail 郵箱 * * @apiSuccess {String} firstname Firstname of the User. * @apiSuccess {String} lastname Lastname of the User. */ router.post('/getMailCode', (req, res) => { let { mail } = req.body if (mail) { let code = parseInt( Math.random() * 10000 ) // 隨機驗證碼 codes[mail] = code console.log(codes) mailSend.send(mail, code).then(() => { res.send({err: 0, msg: '驗證碼發送成功'}) }).catch((err) => { res.send({err: -1, msg: '驗證碼發送失敗'}) }) } else { res.send({err: -1, msg: '參數錯誤'}) } }) module.exports = router
啓動本地數據庫mongod
啓動服務node server.js
我使用的是nodemon插件命令,其實就是node命令同樣的,只是能夠在保存代碼的時候 不用重啓服務,能夠直接看效果
由於咱們沒寫界面,直接經過postman看json
先用一個錯誤的驗證碼
再使用郵箱接收的正確驗證碼
具體咱們進到本地數據查看數據
數據錄入成功!api