nodejs express接入阿里云短信服务实现短信发送功能

本文将实现阿里云中短信服务的【短信验证码功能】


第一步先要到阿里云平台去申请短信签名和模版(如果已完成可以忽略这一步)
  1. 首选需要有阿里云账号,进入阿里云【短信服务控制台】,可以在搜索栏搜索短信服务
    在这里插入图片描述

  2. 进入短信服务控制台后,点击 国内消息 >> 模版签名 >> 添加签名,按照提示去添加即可,蒹添加后就等待审核通过
    在这里插入图片描述

  3. 添加短信模版, 点击 模版管理 >> 添加模版,根据提示添加,这次测试就用系统送的模版。
    在这里插入图片描述

  4. 注意:因为后续开发要用到的是数据是【签名名称】【模版CODE】【accessKeyId】【secretAccessKey】,所以要做好准备。 accessKeyId 和 secretAccessKey 在右上角用户头像点击可以看到【AccessKey管理】,点击进去里面可以获取,注意,这id和key比较重要,千万不要暴露出去
    在这里插入图片描述


短信模版的信息都准备好了之后,下面就可以开发程序了
  1. 首先需要确定是否安装express,如果已安装可以忽略这一步
cnpm install -g express-generator 
  1. 然后用express创建一个项目
express sms_projects
  1. 进入sms_projects目录
cd sms_projects
  1. 初始化项目
cnpm install
  1. 安装阿里云短信服务模块
cnpm i @alicloud/sms-sdk --save
  1. 在app.js里修改代码,将短信接口模块单独出来
    在这里插入图片描述

  2. 在routes文件夹下添加api.js文件

var express = require('express');
var router = express.Router();

//引入阿里云短信服务模块
const SMSClient = require('@alicloud/sms-sdk');

// 产生6位随机数(用来生成短信验证码的)
function getCode() {
	let str = "";
	for (let i = 0; i < 6; i++) {
		str += parseInt(Math.random() * 10)
	}
	return str;
}

/ ** 
 *这里写post请求接口,前端调用 http://localhost:3000/api/get_sms
 *默认端口是3000,也可以在./bin/www里面修改
 */
router.post('/get_sms', function(req, res, next) {
	let phoneNum = req.body.phone;  //获取前端参数phone
	console.log("手机号码", phoneNum);
	
	//初始化sms_client
	let smsClient = new SMSClient({
		accessKeyId: 'LTAI4G**************',  //accessKeyId 前面提到要准备的
		secretAccessKey: 'C2w************'  //secretAccessKey 前面提到要准备的
	});
	
	6位随机数
	let str = getCode();

	// 开始发送短信
	smsClient.sendSMS({
		PhoneNumbers: phoneNum,
		SignName: "sign****", //签名名称 前面提到要准备的
		TemplateCode: "SMS_**********", //模版CODE  前面提到要准备的
		TemplateParam: `{"code":'${str}'}`, // 短信模板变量对应的实际值,JSON格式
	}).then(result => {
		console.log("result", result)
		let {Code} = result;
		if (Code == 'OK') {
			res.json({
				code: 0, 
				msg: 'success',
				sms: str
			})
			console.log(result)
		}
	}).catch(err => {
		console.log(err);
		res.json({
			code: 1, 
			msg: 'fail: ' + err.data.Message
		})
	})

});

module.exports = router;

  1. 这里写完之后,保存,在终端执行命令npm start之后,既可以运行了。这里只是简单实现了接入阿里云短信服务的短信功能,并没有做其他验证。可以相对改变一下,比如做注册短信验证,可以把生成的6位随机数也传给注册接口进行验证。这里就不多写了,自由发挥!!!!

学无止境,加油骚年
### 实现本地图片上传至CDN并更新图片路径 在 UniApp 中实现本地图片上传到 CDN 并更新图片路径的过程涉及几个关键部分。首先,需要通过前端代码选择和上传图片;其次,在服务器端接收文件并将其实例化保存到指定位置;最后,返回新的 URL 给客户端用于替换原有资源链接。 #### 前端:选择与上传图片 为了简化操作流程,可以利用 `uni.chooseImage` API 来让用户挑选想要上载的照片,并借助第三方库(比如 axios 或者 uni.request)发送 POST 请求给后端接口完成实际的数据传输工作[^1]: ```javascript // 在页面方法内定义函数来处理图像的选择及提交过程 async function uploadImage() { const res = await uni.chooseImage({ count: 1, // 只允许单张照片选取 sizeType: ['compressed'], // 对所选图片进行压缩 sourceType: ['album', 'camera'] // 支持相册和相机两种方式获取素材 }); let tempFilePaths = res.tempFilePaths; // 发送请求前先读取文件内容作为 FormData 的一部分传递过去 var formData = new FormData(); formData.append('file', {uri:tempFilePaths[0], name:'image.png', type:'image/png'}); try{ const response = await uni.uploadFile({ url: "https://your-server.com/upload", // 替换成自己的服务地址 filePath: tempFilePaths[0], name: 'file', header:{ 'content-type': 'multipart/form-data' }, formData, success:(uploadRes)=>{ console.log(uploadRes.data); // 解析响应数据得到新图标的访问路径 let resultData = JSON.parse(uploadRes.data); if(resultData.code === 200){ updateImageUrlInDatabase(resultData.url); // 更新数据库记录中的图标URL字段值为最新的那个 // 同步修改界面上显示的老版本icon对应的src属性指向刚传上去的新版cdn link this.$set(this.imageSrc,'value',resultData.url); alert("Upload successful!"); }else{ throw Error(`Failed to upload image with code ${resultData.code}`); } } }); }catch(error){ console.error(error.message || error); } } ``` 此段 JavaScript 代码展示了如何调用 `chooseImage()` 方法让用户体验更友好地从设备中挑出一张待上传的图片,之后再经由 `uploadFile()` 函数把该文件连同其他必要参数一起打包成 HTTP 请求发往远程服务器做进一步处理。 #### 后端:接受文件并存储于 CDN 对于后台而言,则需准备好相应的路由用来监听来自移动端发起的上述类型的请求事件。通常情况下会采用 Node.js 结合 Express 框架快速搭建起 RESTful Web Service 接口,配合 AWS S3、阿里云 OSS 等对象储存解决方案轻松达成目标功能: ```nodejs const express = require('express'); const multer = require('multer'); const router = express.Router(); router.post('/upload', (req,res,next) => { // 配置 Multer 存储引擎选项以便适配不同的云端服务商API需求 const storageEngine = multer.memoryStorage(); const upload = multer({storage : storageEngine}).single('file'); upload(req, res, async(err)=>{ if (!err && req.file){ try{ // 这里假设已经配置好了AWS SDK环境变量以及初始化好S3 client实例 const s3Client = new AWS.S3(); const params = { Bucket: process.env.BUCKET_NAME, Key: `${Date.now().toString()}${path.extname(req.file.originalname)}`, Body: req.file.buffer, ContentType: req.file.mimetype }; const data = await s3Client.putObject(params).promise(); return res.status(200).json({ message:"Successfully uploaded file.", url:`https://${process.env.BUCKET_NAME}.s3.amazonaws.com/${params.Key}` }); } catch(e){ next(new Error(`Error during uploading the file:${e}`)); } } else { next(err||new Error('No files were uploaded.')); } }) }) module.exports = router; ``` 这段 Node.js/Express 应用程序片段说明了怎样设置中间件解析 multipart form 数据流形式接收到的大二进制格式文档资料,紧接着依据业务逻辑编写异步任务负责将这些多媒体资产妥善安置入特定的对象存储空间之中去。 一旦成功完成了整个上传动作,便会向调用方反馈一条包含有最新生成好的公开可访问网络定位符的消息体,从而使得前端能够及时得知此次事务的结果状态并且据此作出相应调整措施,例如刷新视图组件重新渲染带有新 CDN 地址标记过的图形元素样式等。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值