热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

node.js如何封装一个接口

用到的应用:1.webstorm2.NavicatforMySQL3.postman一.使用express创建项目1.npminstallexpress-gen

用到的应用: 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.js

var 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 &#61; 1; i <names.length; i&#43;&#43;) {name &#43;&#61; names[i].substring(0,1).toUpperCase() &#43; names[i].substring(1)}models.push({name: name, path: &#39;./&#39; &#43; item})}
})
// 文件内容模板
const template &#61; &#96;
var Sequelize &#61; require(&#39;sequelize&#39;);
// 创建数据库连接
var sequelize &#61; new Sequelize(&#39;hhdj&#39;, &#39;root&#39;, &#39;root&#39;, {
host: &#39;localhost&#39;,
dialect: &#39;mysql&#39;,
pool: {
max: 5,
min: 0,
idle: 10000
}
})
// 数据库模型名称及lujing
const models &#61;${JSON.stringify(models, null, 4)}
// 数据模型输出
models.forEach(item &#61;> {
module.exports[item.name] &#61; require(item.path)(sequelize, Sequelize)
})
&#96;
fs.writeFile("./models/index.js", template, function () {console.log(&#39;创建成功&#39;)
}) 运行&#xff1a; node ./create.js,

此时可在index.js中看到&#xff1a;

var Sequelize &#61; require(&#39;sequelize&#39;);
// 创建数据库连接
var sequelize &#61; new Sequelize(&#39;hhdj&#39;, &#39;root&#39;, &#39;root&#39;, {host: &#39;localhost&#39;,
dialect: &#39;mysql&#39;,
pool: {max: 5,
min: 0,
idle: 10000
}
})
// 数据库模型名称及lujing
const models &#61;[{"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 &#61;> {module.exports[item.name] &#61; require(item.path)(sequelize, Sequelize)
})

到此数据库部分写完了。

四。在routes文件夹下创建api文件夹&#xff0c;index.js

1.封装一个登陆接口。

  a&#xff0c;先写一个util.js处理接口格式与检查token

var jwt &#61; require(&#39;jwt-simple&#39;)
var User &#61; require(&#39;../models&#39;).User
module.exports &#61; function () {// 检查token
this.checkToken &#61; (req, res, next) &#61;> {var t &#61; req.headers[&#39;access-token&#39;]if (!t) {res.send(this.setResult(300, &#39;no token&#39;))return
}var token &#61; jwt.decode(t, &#39;hhdjj&#39;)User.find({where: {id: token.id}}).then(r &#61;>{req.TOKEN_USER &#61; rnext()}).catch(r &#61;> {res.send(this.setResult(300, &#39;token验证失败&#39;))})}// 设置token
this.setToken &#61; (obj) &#61;> {return jwt.encode(obj, &#39;hhdjj&#39;)}// 接口统一返回格式
this.setResult &#61; (code, message&#61;&#39;success&#39;, data &#61; null) &#61;> {return {code: code,
message: message,
data: data}}
}

b&#xff0c;在index.js写入

const express &#61; require(&#39;express&#39;)
const router &#61;express.Router()

var Util &#61; require(&#39;./util&#39;)
var a &#61;new Util()
var crypto &#61; require(&#39;crypto&#39;) // 用于密码加密
var User &#61; require(&#39;../models&#39;).User

router.post(&#39;/user/login&#39;,function(req, res, next) {

var phone &#61; req.body.phone
var password &#61; req.body.passwordif (!phone) {res.send(a.setResult(301, &#39;账号空&#39;))return
}if (!password) {res.send(a.setResult(301, &#39;账号空&#39;))return
}var md5 &#61; crypto.createHash(&#39;md5&#39;) // md5加密
var upPassword &#61; password &#43; &#39;hhdj&#39;
var params &#61; {where: {password: md5.update(upPassword).digest(&#39;hex&#39;),
phone: phone
}}User.findOne(params).then( su &#61;> {res.send(a.setResult(200, &#39;success&#39;, a.setToken(su)))}).catch( ex &#61;> {// res.send({code: 500, message: &#39;error&#39;})
res.send(a.setResult(500, &#39;error&#39;))}))

module.exports &#61; router c.此时运行项目并使用postman调试。

五&#xff0c;使用apidoc写接口文档

接口文档&#xff1a;http://apidocjs.com/#demo

先下载 &#xff1a; npm install apidoc --save 

在上面的index.js写入

/**
* &#64;api {post} /user/login Request User information
* &#64;apiName 登录
* &#64;apiGroup User
*
* &#64;apiParam {String} phone 手机号.
* &#64;apiParam {String} password 密码
*
* &#64;apiSuccess {String} code 200 of the User.
* &#64;apiSuccess {String} message success of the User.
* &#64;apiSuccess {String} data 数据 of the User
*
* &#64;apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* {
* &#39;code&#39;: 200,
* &#39;message&#39;: &#39;success&#39;,
* &#39;data&#39;: su
* }
*
* &#64;apiError UserNotFound The id of the User was not found.
*
* &#64;apiErrorExample Error-Response:
* HTTP/1.1 404 Not Found
* {
* &#39;code&#39;: 500,
* &#39;message&#39;: &#39;error&#39;
* }
*/




在文档根目录下创建apidoc.json&#xff0c;写入

{"name": "name",
"version": "1.0.0",
"description": "apiDoc basic example",
"title": "title",
"url" : "localhost:3000"
} 运行 

apidoc -i routes/api/ -o apidoc/






此时会生成一个apidoc的文件夹&#xff0c;下面有个index.html,打开&#xff0c;即可看到我们封号的接口文档。






推荐阅读
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
  • 目录1、将mysql数据导出到SQL文件中(数据库存在的情况)2、将现有的sql文件数据导入到数据库中(前提数据库存在) 3、利用Navicat导出SQL文件和导入SQL文件1)从 ... [详细]
  • 必须先赞下国人npm库作品:node-images(https:github.comzhangyuanweinode-images),封装了跨平台的C++逻辑,形成nodejsAP ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有