通过node.js的request模块调用企业微信第三方接口

通过node.js的request模块调用企业微信第三方接口

业务场景:博主做了一个前台为企业微信应用,后台为web端管理系统的项目,因此组织结构和用户结构等都要与企业微信同步,所以前端调用接口后不仅需要写入数据库还要同步到企业微信,也就有了在后端调用企业微信接口的这一步骤

以下代码不包括连接数据库,创建数据库实体类等操作

技术栈:node.js+express+mongDB

//routes/index.js
  const service = require("../service/index")//引入处于业务逻辑的文件
  
  app.post("/admin/api/addDepartment", async ( req, res) => {
  	let data = await service.insertDepartment(req.body)
  	if(data.code == 0){
      res.json( {code:200,msg:"添加部门成功",data})
    }else{
      res.json( {code:200,msg:"数据库添加成功",data})
    }
  })
  
//service/index.js
const rq = require("request-promise")//引入node的request-promise模块
const Counter = require("../../models/Counter")//引入计数模块
const Department = require("../../models/Department")//引入部门模块


const inserDepartment = async (data) =>{
	/*
	以下这一段代码是因为mongDB没有自动实现自增序列的方法,所以根据网上查阅的资料写了出来
	但目前每次获取到的结果都是+2之后的结果,等我日后更新修复这个bug
	*/
	//获取自增序列的值
	const counterResult = await Counter.findOneAndUpdate(
		{ _id: 'departmentId' },
		{ $inc: { seq_val: 1 } }, 
		{new: true},
		 (err, doc) => {
      		if(err) {return {msg : "获取自增ID失败",err :err }}
      		return doc
    	}
	)
	//给数据库部门ID赋值
	data.departmentId = counterResult.seq_val +""
	//写入数据库
	const insertObj = await new Department(data)
	const resultData = await insertObj.save()
		.then( async res => {
			//这里处理企业微信需要的数据
		    let  wxData  = {
		    	name: res.departmentName,//企业微信部门中文名
		        id: res.departmentId, //企业微信部门ID
		        order: res.order,//企业微信部门排序值
		        parentid: res.parentId//企业微信父级部门ID
		    }
		    	//调用企业微信第三方接口
			const requestResult = await rq({
			   	//请求路径
			   	url: "https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token=" +access_token,
			   	//请求方法
			    method: 'POST',
			    //自动解析响应中的JSON字符串
			    json: true,
			    //请求头
			    headers:{
			      	"content-type": "application/json"
			    },
			    //请求体
			    body: wxData
			})
			  .then( res => {
			        console.log(`请求返回的数据::${JSON.stringify(res)}`)
			        return res
			  })
			  .catch( err => {
			      	console.log(`请求错误的数据: ${JSON.stringify(error)}`)
			        return err
			  })
			  console.log("企业微信接口返回了吗")
			  return requestResult
		})
		//简单处理一下企业微信返回的数据
		if(resultData.errcode == 0){
		    return {
		        code: 0,
		        data: resultData
		    }
		 }else{
		    return {
		        code: 1,
		        data: resultData
		    }
		 }
}

总结:

这次的小demo最大的阻碍其实是执行顺序的问题,在前期过程中原本是用的是node中的request模块但是总会在接口数据都已经返回了,企业微信的回调函数才运行,因此在阅读了官方文档后发现还有request-promise的模块,果断采用了,就不会出现很奇怪的执行顺序
细心的朋友应该发现了有很多result的变量,这个主要是为了解决return的时候总是undefimed的问题.

最后

这是博主第一次写接口,有写的不对的地方,或者不够简洁的地方,希望老哥们多多提出,感谢~

mongoose官方文档:http://www.mongoosejs.net/docs/api.html#Model
request-promise官方文档: https://github.com/request/request-promise
企业微信官方文档:https://work.weixin.qq.com/api/doc/90000/90135/90205

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值