阿里云API网关、函数计算、表格存储简单结合使用小结
2018-02-07 20:52
701 查看
serverless服务现在越来越火,简单写一下一个结合阿里云API网关、函数计算、表格存储实现的用户注册登录功能。
相关链接
函数计算
API网关
表格存储
主要是外部请求API网关,API网关调用相应的函数计算服务,然后我们将表格存储中的数据进行读写验证。表格存储是一种NoSQL结构的实现。我们整个过程并不需要像传统后端那样需要服务器,全都在阿里云服务平台上进行部署。代码部分是nodejs8环境进行编写。结合阿里云提供的SDK我们实现起来也是相当方便的。
先开通阿里云的函数计算、API网关、表格存储服务,按照文档来即可。
创建表格存储实例,我这里是userinfo,然后再创建一个user_info表来存放用户的账号密码。主键设为用户名username
创建了两个函数计算分别是login和regist。函数计算是通过事件驱动的,每次API网关接收到请求,就会去调用这个API网关对应的函数(可参考API网关调用函数计算)。当然我们还需要相关的授权才能让API网关去验证我们的请求
在函数计算中实现我们的逻辑就可以了。callback其实类似于return执行了之后它后面的语句就不会执行了。
相关链接
函数计算
API网关
表格存储
主要是外部请求API网关,API网关调用相应的函数计算服务,然后我们将表格存储中的数据进行读写验证。表格存储是一种NoSQL结构的实现。我们整个过程并不需要像传统后端那样需要服务器,全都在阿里云服务平台上进行部署。代码部分是nodejs8环境进行编写。结合阿里云提供的SDK我们实现起来也是相当方便的。
// tableClient.js 定义我们表格存储的相关配置 const TableStore = require('tablestore'); const client = new TableStore.Client({ accessKeyId: '你的accessKeyId', secretAccessKey: '你的secretAccessKey', endpoint: ' 实例的公网IP', instancename: '表格存储实例名' }); module.exports = client;
// login函数 // 用户注册逻辑 const tableClient = require('./table'); const TableStore = require('tablestore'); const Long = TableStore.Long; const baseresponse = { isBase64Encoded: false, statusCode: 200 }; async function handler(event, context, callback) { try { event = JSON.parse(event.toString()); const body = JSON.parse(event.body); //将body的内容转成js对象 const paramsget = { tableName: "user_info", primaryKey: [ { 'username': body.username } ] }; //检查是否存在那个用户名 const getdata = await tableClient.getRow(paramsget); if (body.password !== body.repassword) { callback(null, Object.assign(baseresponse, { body: { status: "error", message: "两次密码不相同" } })); } if (getdata.row && getdata.row.attributes && getdata.row.attributes.length > 0) { callback(null, Object.assign(baseresponse, { body: { status: "error", message: "用户名已经存在,请换个用户名" } })); } const paramsput = { tableName: "user_info", condition: new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_NOT_EXIST, null), primaryKey: [ { 'username': body.username } ], // 把用户名作为主键 attributeColumns: [ { 'password': body.password } ], returnContent: { returnType: TableStore.ReturnType.Primarykey } }; const data = await tableClient.putRow(paramsput); const response = Object.assign(baseresponse, { body: { status: "ok" } }); callback(null, response); } catch (e) { callback(e); } } module.exports.handler = handler;
// regist函数 // 用户注册逻辑 const tableClient = require('./table'); const TableStore = require('tablestore'); const Long = TableStore.Long; const baseresponse = { isBase64Encoded: false, statusCode: 200 }; async function handler(event, context, callback) { try { event = JSON.parse(event.toString()); const body = JSON.parse(event.body); //将body的内容转成js对象 const paramsget = { tableName: "user_info", primaryKey: [ { 'username': body.username } ] }; //检查是否存在那个用户名 const getdata = await tableClient.getRow(paramsget); if (body.password !== body.repassword) { callback(null, Object.assign(baseresponse, { body: { status: "error", message: "两次密码不相同" } })); } if (getdata.row && getdata.row.attributes && getdata.row.attributes.length > 0) { callback(null, Object.assign(baseresponse, { body: { status: "error", message: "用户名已经存在,请换个用户名" } })); } const paramsput = { tableName: "user_info", condition: new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_NOT_EXIST, null), primaryKey: [ { 'username': body.username } ], // 把用户名作为主键 attributeColumns: [ { 'password': body.password } ], returnContent: { returnType: TableStore.ReturnType.Primarykey } }; const data = await tableClient.putRow(paramsput); const response = Object.assign(baseresponse, { body: { status: "ok" } }); callback(null, response); } catch (e) { callback(e); } } module.exports.handler = handler;
先开通阿里云的函数计算、API网关、表格存储服务,按照文档来即可。
创建表格存储实例,我这里是userinfo,然后再创建一个user_info表来存放用户的账号密码。主键设为用户名username
创建了两个函数计算分别是login和regist。函数计算是通过事件驱动的,每次API网关接收到请求,就会去调用这个API网关对应的函数(可参考API网关调用函数计算)。当然我们还需要相关的授权才能让API网关去验证我们的请求
在函数计算中实现我们的逻辑就可以了。callback其实类似于return执行了之后它后面的语句就不会执行了。
//客户端请求,同样利用了阿里云提供的SDK const Client = require('aliyun-api-gateway').Client; const client = new Client('授权过的app id', '对应的secret'); const url = 'api所在的url' client.post(url,{ data: { "password": "1231", "username": "diaotai2" }, headers: { accept: 'application/json', "Content-Type":"application/x-www-form-urlencoded; charset=utf-8" } }).then(res =>{ console.log(res) })
相关文章推荐
- 使用函数计算对表格存储中数据做简单清洗
- linux 下epoll与线程池结合使用的简单实例(含常用函数解释)
- 阿里云API网关双向通信功能使用说明
- 编写一个程序,要求用户输入最多10个高尔夫成绩,并将其存储在一个数组中。 程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。 请使用3个数组处理函数来分别进行输入、显示和计算
- 10分钟上线 - API网关 + 函数计算实现图片处理服务
- oracle简单的存储过程和函数以及触发器的使用
- 阿里云API网关使用教程
- 免费使用函数计算,只有在阿里云能实现
- Ocelot --API网关简单使用
- 10分钟上线 - API网关 + 函数计算实现图片处理服务
- 使用Tab controls window api 函数实现简单界面
- 10分钟上线 - API网关 + 函数计算实现图片处理服务
- 10分钟上线 - API网关 + 函数计算实现图片处理服务
- android--内部存储写文件和使用API获取内部存储路径,sharedperferance获取原有的账号密码--简单的登陆(记录原有的账号和密码)--I/0流介绍
- 10分钟上线 - API网关 + 函数计算实现图片处理服务
- 免费使用函数计算,只有在阿里云能实现
- MPI编程--使用最简单的基本函数计算PI值
- MDX Cookbook 12 - 计算 SMA 简单移动平均 LastPeriods() 函数的使用
- 免费使用函数计算,只有在阿里云能实现
- 阿里云API网关(12)为员工创建子账号,实现分权管理API:使用RAM管理API