Javascript 正在调用的许多Firebase函数中只有一个

Javascript 正在调用的许多Firebase函数中只有一个,javascript,node.js,firebase,google-cloud-functions,Javascript,Node.js,Firebase,Google Cloud Functions,我有两个Firebase函数,当有Http请求时我想执行,一个函数(createEmailList)用于将数据保存在Firebase数据库中,另一个函数(zohoCrmHook)用于保存在称为Zoho的第三方CRM中 将函数部署到Firebase时,函数日志显示两者都已正确部署。但是,当从前端发出Http请求时,日志显示只有一个函数(createEmailList)正在执行 如日志所示,正在执行第一个函数createEmailList,数据将毫无问题地显示在Firebase数据库中。但是,第二

我有两个Firebase函数,当有Http请求时我想执行,一个函数(
createEmailList
)用于将数据保存在Firebase数据库中,另一个函数(
zohoCrmHook
)用于保存在称为Zoho的第三方CRM中

将函数部署到Firebase时,函数日志显示两者都已正确部署。但是,当从前端发出Http请求时,日志显示只有一个函数(
createEmailList
)正在执行

如日志所示,正在执行第一个函数
createEmailList
,数据将毫无问题地显示在Firebase数据库中。但是,第二个函数zohoCrmHook甚至没有被执行

index.js

const functions=require('firebase-functions');
const admin=require(“firebase管理员”)
const servicecomport=require(“./service_account.json”);
const createEmailList=require(“./createEmailList”)
//佐霍
const zohoCrmHook=require(“./zohoCrmHook”)
admin.initializeApp({
凭证:管理员凭证证书(serviceAccount),
数据库URL:“https://landing-page.firebaseio.com"
})
exports.zohoCrmHook=functions.https.onRequest(zohoCrmHook)
exports.createEmailList=functions.https.onRequest(createEmailList)
createEmailList.js

const admin=require('firebase-admin')
const cors=require('cors')({origin:true})
module.exports=(请求、回复)=>{
cors(请求、回复等){
如果(!req.body.email){
返回res.status(422).send({error:'Bad Input'})
}
const email=字符串(req.body.email)
const firstName=字符串(req.body.firstName)
const lastName=字符串(req.body.lastName)
常数数据={
电子邮件,
名字,
姓氏
}
const db=admin.firestore()
const docRef=db.collection('用户')
.doc(电邮)
.set(数据,{merge:false})
.catch(err=>res.status(422).send({error:err}))
res.status(204.end();
})
}
zohoCrmHook.js

const axios=require('axios');
const functions=require('firebase-functions');
//佐霍
const clientId=functions.config().zoho.client\u id;
const clientSecret=functions.config().zoho.client_secret;
const refreshttoken=functions.config().zoho.refresh_token;
常量baseURL=https://accounts.zoho.com';
module.exports=异步(请求、恢复)=>{
常数newLead={
“数据”:[
{
“电子邮件”:req.body.Email,
“姓氏”:req.body.lastName,
“First_Name”:req.body.firstName,
}
],
“触发器”:[
“批准”,
“工作流”,
“蓝图”
]
};
const{data}=wait getAccessToken();
const accessToken=data.access\u令牌;
const leads=等待getLeads(accessToken);
const result=checkLeads(leads.data.data,newLead.data[0]。电子邮件);
如果(结果长度<1){
试一试{
返回res.json(等待createLead(accessToken,newLead));
}
捕获(e){
控制台日志(e);
}
}
else res.json({message:'Lead ready in CRM'})
}
函数getAccessToken(){
常量url=`https://accounts.zoho.com/oauth/v2/token?refresh_token=${refreshttoken}&client\u id=${clientId}&client\u secret=${clientSecret}&grant\u type=refresh\u token`;
返回新承诺((解决、拒绝)=>{
axios.post(url)
。然后((响应)=>{
返回解析(响应);
})
.catch(e=>console.log(e))
});
}
功能getLeads(令牌){
常量url=https://www.zohoapis.com/crm/v2/Leads';
返回新承诺((解决、拒绝)=>{
获取(url{
标题:{
“授权”:Zoho oauthtoken${token}`
}
})
。然后((响应)=>{
返回解析(响应);
})
.catch(e=>console.log(e))
})
}
函数createLead(令牌,lead){
常量url=https://www.zohoapis.com/crm/v2/Leads';
返回新承诺((解决、拒绝)=>{
const data=JSON.stringify(lead);
axios.post(url、数据、{
标题:{
“授权”:Zoho oauthtoken${token}`
}
})
。然后((响应)=>{
console.log(response.data)
返回解析(响应);
})
.catch(e=>拒绝(e))
})
}
功能检查引线(引线、电流引线){
返回lead.filter(lead=>lead.Email===currentLead)
}

由于您要导出两个
函数.https.onRequest
声明,您将得到两个云函数,每个函数都有自己的URL/端点。因此,如果这是您需要的,那么您需要配置两个调用这些函数的web钩子


然而,从阅读您的问题来看,听起来您更希望一个云函数完成两件事,在这种情况下,您应该只有一个
functions.https.onRequest
声明,然后调用两个常规JavaScript函数(例如)

更像是:

exports.myWebHook = functions.https.onRequest(function(req, res) {
  zohoCrmHook(...);
  createEmailList(...);
})
您需要弄清楚在这两个函数调用中传递什么,因为您无法传递请求和响应


或者,您可以从这里调用这两个云函数,但这通常只会增加成本,而不会带来什么好处。

感谢您的回复。在您的示例中,
zohoCrmHook(…)
createEmail(…)
的括号内应该是什么?它们是否可以留空,因为它们只是从另一个组件导入的?如上所述,您需要更改这些函数。您不能简单地传递请求和响应,因为这些函数中只有一个应该写入响应(或者至少写入头/关闭响应)。如果要同时使用
axios.all
和两个
axios.post
作为