在Zapier Node.js环境调用Asana API时如何为let定义的body添加IF逻辑
问题原因
你无法在对象字面量的定义内部直接使用if/else语句,这是JavaScript的语法限制,所以才会出现之前尝试失败的情况,可通过以下两种方案实现需求:
方案1:先定义基础配置,再动态修改字段(可读性更高)
在完成dateStartFormatted和dateEndFormatted的赋值后,先构建不带日期字段的基础请求数据,再根据判断条件添加对应的日期字段即可,修改后的完整代码如下:
// this is wrapped in an `async` function // you can use await throughout the function // get personName var personName = inputData.personName; // set dateStart const dateStart = inputData.dateStart; // convert the format of MM/DD/YYYY to YYYY-MM-DD for Asana's use var dateStartFormatted = new Date(dateStart).toISOString().split('T')[0]; // set dateEnd const dateEnd = inputData.dateEnd; // convert the format of MM/DD/YYYY to YYYY-MM-DD for Asana's use var dateEndFormatted = new Date(dateEnd).toISOString().split('T')[0]; // get dateDuration var dateDuration = inputData.dateDuration; // get taskURL from the custom fields above var theURL = inputData.eventLink; // encode the URL var theEventLinkFinal = encodeURI(theURL); // get dateStartPretty var dateStartPretty = inputData.dateStartPretty; // get dateEndPretty var dateEndPretty = inputData.dateEndPretty; // get projectSection var projectSection = inputData.projectSection; // 定义不带日期字段的基础数据 let baseData = { "custom_fields": { "917734345465519": "917734345465549" }, "name": personName + " Off", "notes": "Date range: " + dateStartPretty + " – " + dateEndPretty + "\n\nTotal number of days: " + dateDuration + "\n\nCalendar link: " + theEventLinkFinal, "memberships": [ { "project": "893079009430519", "section": projectSection } ], "followers": [ "670933960116792", "7747475052050" ], "workspace": "301669572129" }; // 根据日期判断添加对应字段 if (dateStartFormatted === dateEndFormatted) { baseData.due_at = dateStartFormatted; } else { baseData.start_on = dateStartFormatted; baseData.due_on = dateEndFormatted; } // 组装最终请求体 let body = { "data": baseData }; // create the task based on the body and data const res = await fetch('https://app.asana.com/api/1.0/tasks', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'Authorization': 'Bearer 0/XXXXXXXX' }, body: JSON.stringify(body) }); const data = await res.json(); output = {data: data};
方案2:三元运算符+对象展开语法(写法更紧凑)
如果你不需要拆分对象定义,也可以用Node 10完全支持的对象展开运算符,结合三元判断直接在body定义内部完成逻辑,核心修改部分如下:
let body = { "data": { "custom_fields": { "917734345465519": "917734345465549" }, // 动态插入对应日期字段 ...(dateStartFormatted === dateEndFormatted ? { "due_at": dateStartFormatted } : { "start_on": dateStartFormatted, "due_on": dateEndFormatted } ), "name": personName + " Off", "notes": "Date range: " + dateStartPretty + " – " + dateEndPretty + "\n\nTotal number of days: " + dateDuration + "\n\nCalendar link: " + theEventLinkFinal, "memberships": [ { "project": "893079009430519", "section": projectSection } ], "followers": [ "670933960116792", "7747475052050" ], "workspace": "301669572129" } };
内容的提问来源于stack exchange,提问作者Garconis
相关产品推荐
相关产品推荐

