【函数计算实践】nodejs初探示例——本地mac环境
系列文章:
前言
前面提到过阿里云上的函数计算应用。支持的语言包括nodejs、python、java等等。但java打包相对比较麻烦而且体积较大,所以更倾向于推荐nodejs来编写执行函数。所以,下面介绍一些基础功能的实现,这也是在上述案例中所使用到的。
一 背景
nodejs的下载和安装由于不是本文重点,故不再赘述,网络正常的情况下,基本都可以顺利安装。有问题可在评论区留言,一起探讨解决方案。
直接从官网: 下载mac 64位版本,对应的是node-v14.15.3.pkg版本安装包。
安装后开始执行第一个示例,项目需求将需要的几个功能:1、图片内容获取,2、内容转base64、计算md5
二 依赖包
2.1 request
设计为进行http调用的最简单方法。它支持HTTPS,默认情况下遵循重定向。
2.2 crypto
提供通用的加密和哈希算法。用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢。Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。
三 示例
注:文本保存为 cal_img_similar.js,在命令行执行node cal_img_similar.js即可。
3.1 字符串转Base64示例代码
var crypto = require('crypto');
var buffer = Buffer.from('this is an image demo');
var base64Str = buffer.toString('base64');
console.log(base64Str);
var buffer = Buffer.from('dGhpcyBpcyBhbiBpbWFnZSBkZW1v', 'base64')
var initStr = buffer.toString();
console.log(initStr);
注意:在有些文章,搜到的是使用 new Buffer(ss);语句来创建Buffer,但现在执行会导致报错:
(node:15386) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
即 Buffer()方法,已经被废弃。所以我们使用Buffer.from(ss)进行转换。
3.2 字符串计算md5
var crypto = require('crypto');
var content = '123456';
var result = crypto.createHash('md5').update(content).digest("hex")
console.log("md5 result:"+result); //e10adc3949ba59abbe56e057f20f883e
3.3 获取图片内容
var request = require('request');
var inputImgUrl = "https://avatar.csdn.net/1/A/1/3_zzwwjjdj1.jpg";
request(inputImgUrl, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
});
输出内容如下:

可见,直接输出字符(流)会是乱码,所以通常我们会进行base64 或 计算md5转换。处理如下:
var request = require('request');
var crypto = require('crypto');
var inputImgUrl = "https://avatar.csdn.net/1/A/1/3_zzwwjjdj1.jpg";
request(inputImgUrl, function (error, response, body) {
if (!error && response.statusCode == 200) {
//计算md5
var result = crypto.createHash('md5').update(body).digest("hex");
console.log(result);
// var buffer = Buffer.from(body);
// var base64Str = buffer.toString('base64');
// console.log(base64Str);
}
});