node.js如何封装一个接口
来源:互联网 发布:angelababy心机知乎 编辑:程序博客网 时间:2024/05/16 10:00
用到的应用: 1.webstorm 2.Navicat for MySQL 3.postman
一.使用express创建项目
1.
npm install express-generator -g
2.express myapp
二.使用Navicat for MySQL将mysql表引入,开启数据库
三.项目中引入sequlize-auto
参考文档:https://github.com/sequelize/sequelize-auto
1.
npm install -g sequelize-auto
2.创建auto.jsvar SequelizeAuto = require('sequelize-auto')var auto = new SequelizeAuto( 'hhdj', 'root', 'root', { host: 'localhost', dialect: 'mysql', directory: './models', // prevents the program from writing to disk port: '3306', additional: { timestamps: false //... } })auto.run(function (err) { if (err) throw err; console.log(auto.tables); // table list console.log(auto.foreignKeys); // foreign key list});
运行auto.js 命令: node ./auto.js
此时会在根目录下创建models文件夹3.在此文件夹下创建index.js
写一个模板处理数据库映射,建create.js
let fs = require('fs')let files = fs.readdirSync('./models')let models = []// 解析名称做成驼峰命名法files.forEach(item => { if (item != 'index.js') { let names = item.split('.')[0].split('_') let name = '' for (let i = 1; i < names.length; i++) { name += names[i].substring(0,1).toUpperCase() + names[i].substring(1) } models.push({name: name, path: './' + item}) }})// 文件内容模板const template = `var Sequelize = require('sequelize');// 创建数据库连接var sequelize = new Sequelize('hhdj', 'root', 'root', { host: 'localhost', dialect: 'mysql', pool: { max: 5, min: 0, idle: 10000 }})// 数据库模型名称及lujingconst models =${JSON.stringify(models, null, 4)}// 数据模型输出models.forEach(item => { module.exports[item.name] = require(item.path)(sequelize, Sequelize)})`fs.writeFile("./models/index.js", template, function () { console.log('创建成功')})运行: node ./create.js,
此时可在index.js中看到:
var Sequelize = require('sequelize');// 创建数据库连接var sequelize = new Sequelize('hhdj', 'root', 'root', { host: 'localhost', dialect: 'mysql', pool: { max: 5, min: 0, idle: 10000 }})// 数据库模型名称及lujingconst models =[ { "name": "ApplyInfo", "path": "./tb_apply_info.js" }, { "name": "Branch", "path": "./tb_branch.js" }, { "name": "Carousel", "path": "./tb_carousel.js" }, { "name": "Comment", "path": "./tb_comment.js" }, { "name": "CommentRelation", "path": "./tb_comment_relation.js" }, { "name": "CommentUser", "path": "./tb_comment_user.js" }, { "name": "Coordinate", "path": "./tb_coordinate.js" }, { "name": "Forum", "path": "./tb_forum.js" }, { "name": "ForumComment", "path": "./tb_forum_comment.js" }, { "name": "Impress", "path": "./tb_impress.js" }, { "name": "Integral", "path": "./tb_integral.js" }, { "name": "IntegralRule", "path": "./tb_integral_rule.js" }, { "name": "News", "path": "./tb_news.js" }, { "name": "Notice", "path": "./tb_notice.js" }, { "name": "PartyStyle", "path": "./tb_party_style.js" }, { "name": "Payfee", "path": "./tb_payfee.js" }, { "name": "Picture", "path": "./tb_picture.js" }, { "name": "Report", "path": "./tb_report.js" }, { "name": "StudyFile", "path": "./tb_study_file.js" }, { "name": "User", "path": "./tb_user.js" }, { "name": "Manager", "path": "./user_manager.js" }]// 数据模型输出models.forEach(item => { module.exports[item.name] = require(item.path)(sequelize, Sequelize)})
到此数据库部分写完了。
四。在routes文件夹下创建api文件夹,index.js
1.封装一个登陆接口。
a,先写一个util.js处理接口格式与检查token
var jwt = require('jwt-simple')var User = require('../models').Usermodule.exports = function () { // 检查token this.checkToken = (req, res, next) => { var t = req.headers['access-token'] if (!t) { res.send(this.setResult(300, 'no token')) return } var token = jwt.decode(t, 'hhdjj') User.find({where: {id: token.id}}) .then(r =>{ req.TOKEN_USER = r next() }) .catch(r => { res.send(this.setResult(300, 'token验证失败')) }) } // 设置token this.setToken = (obj) => { return jwt.encode(obj, 'hhdjj') } // 接口统一返回格式 this.setResult = (code, message='success', data = null) => { return { code: code, message: message, data: data } }}
b,在index.js写入
const express = require('express')const router =express.Router()
var Util = require('./util')var a =new Util()var crypto = require('crypto') // 用于密码加密var User = require('../models').User
router.post('/user/login',function(req, res, next) {var phone = req.body.phone var password = req.body.password if (!phone) { res.send(a.setResult(301, '账号空')) return } if (!password) { res.send(a.setResult(301, '账号空')) return } var md5 = crypto.createHash('md5') // md5加密 var upPassword = password + 'hhdj' var params = { where: { password: md5.update(upPassword).digest('hex'), phone: phone } } User.findOne(params) .then( su => { res.send(a.setResult(200, 'success', a.setToken(su))) } ) .catch( ex => { // res.send({code: 500, message: 'error'}) res.send(a.setResult(500, 'error')) } ))
c.此时运行项目并使用postman调试。module.exports = router
五,使用apidoc写接口文档
接口文档:http://apidocjs.com/#demo
先下载 : npm install apidoc --save
在上面的index.js写入
/** * @api {post} /user/login Request User information * @apiName 登录 * @apiGroup User * * @apiParam {String} phone 手机号. * @apiParam {String} password 密码 * * @apiSuccess {String} code 200 of the User. * @apiSuccess {String} message success of the User. * @apiSuccess {String} data 数据 of the User * * @apiSuccessExample Success-Response: * HTTP/1.1 200 OK * { * 'code': 200, * 'message': 'success', * 'data': su * } * * @apiError UserNotFound The id of the User was not found. * * @apiErrorExample Error-Response: * HTTP/1.1 404 Not Found * { * 'code': 500, * 'message': 'error' * } */
在文档根目录下创建apidoc.json,写入
{ "name": "name", "version": "1.0.0", "description": "apiDoc basic example", "title": "title", "url" : "localhost:3000"}运行
apidoc -i routes/api/ -o apidoc/
此时会生成一个apidoc的文件夹,下面有个index.html,打开,即可看到我们封号的接口文档。
阅读全文
0 0
- node.js如何封装一个接口
- 如何封装Node.js和前端通用的模块
- 如何封装Node.js和前端通用的模块
- 如何封装一个简单的Android关机接口
- 如何封装一个Android截屏接口,区分横竖屏
- Node.js入门教程:Node.js如何安装配置并部署一个网站
- 如何开发一个产品级的Node.js 应用
- 如何搭建一个简单的本地node.js服务器
- 如何安装Node.js
- 如何安装Node.js
- 如何安装Node.js
- 如何安装Node.js
- 如何安装Node.js
- 如何设计 Node.js
- 如何学习node.js
- 如何安装node.js
- node.js的myql模块封装
- node.js-mongodb封装分页查找
- 使用nutch搭建类似百度/谷歌的搜索引擎
- VTK场景的导入和导出
- JAVA调用C++方式------JNA
- WebView 跳转传值
- 时间管理的七句话
- node.js如何封装一个接口
- js数组删除指定元素
- Stability of Recommendation Algorithms
- PullToRefreshScrollView 上拉下拉刷新 时间
- 欢迎使用CSDN-markdown编辑器
- 内核报错arch/arm/mach-s3c2440/built-in.o: undefined reference to `s3c24xx_spi_gpiocfg_bus0_gpe11_12_13'
- 汇编指令长度的判断
- 利用快速排序思想求数组第k大元素
- Linux Tomcat日志查看实用命令