node.js - Firestore云功能在一个字段中添加多个字段
问题描述
我有一个字段名称“选项”,该字段本身包含 8 个不同的复选框值。我正在使用 nodejs 编写 firestore 云函数,以在存在此字段“选项”的集合中发布数据。到目前为止,这就是我写的
exports.addCourse = functions.https.onRequest((req, res) => {
res.set('Access-Control-Allow-Origin', 'http://localhost:4200');
res.set('Access-Control-Allow-Methods', 'GET', 'POST');
res.set('Access-Control-Allow-Headers', 'Content-Type');
if(req.method === 'OPTIONS') {
res.end();
}
else
{
if (req.body.name != null && req.body.type != null && req.body.discipline != null && req.body.price_options != null
&& req.body.price != null && req.body.addon_prompt != null && req.body.addons != null && req.body.ship_price != null
&& req.body.keycode_bank != null && req.body.card_type != null && req.body.options != null && req.body.certificate_prompt != null
&& req.body.student_to_instructor_ratio != null && req.body.student_to_manikin_ratio != null && req.body.electronic_signature != null
|| req.body.name != undefined && req.body.type != undefined && req.body.discipline != undefined && req.body.price_options != undefined
&& req.body.price != undefined && req.body.addon_prompt != undefined && req.body.addons != undefined && req.body.ship_price != undefined
&& req.body.keycode_bank != undefined && req.body.card_type != undefined && req.body.options != undefined && req.body.certificate_prompt != undefined
&& req.body.student_to_instructor_ratio != undefined && req.body.student_to_manikin_ratio != undefined && req.body.electronic_signature != undefined ) {
let docId = Math.floor(Math.random() * (99999 - 00000));
let newCourse = {
"name": req.body.name,
"type": req.body.type, //1: Classroom session enabled 2. No Classroom session
"discipline": req.body.discipline,
"price_options": req.body.price_options, //Registrations allowed with deposits or not?
"price": req.body.price,
"addon_prompt": req.body.addon_prompt,
"addons": req.body.addons, //add addons api values will be sent here
"ship_price": req.body.ship_price,
"keycode_bank": req.body.keycode_bank, //Keycode bank value will be sent here
"card_type": req.body.card_type, //Card type value will be sent here
"options": {
"certificate_prompt": req.body.certificate_prompt,
"student_to_instructor_ratio": req.body.student_to_instructor_ratio,
"student_to_manikin_ratio": req.body.student_to_manikin_ratio,
"electronic_signature": req.body.electronic_signature
}
}
usersCourses.add(newCourse).then(snapshot => {
res.send(200, {
"message": "Course was successfully created"
})
});
} else {
res.send(400, {
"message": "All fields are required"
})
}
}
});
部署了这个 API,然后用 Postman 打了它,但得到一个错误,“所有字段都是必需的”。我究竟做错了什么?这是在“选项”字段中添加多个字段的正确方法吗?
我通过邮递员发送的数据不是真实的,因为没有为 API 中的属性提供特定的数据类型
数据
{
"name": "req.body.name",
"type": "req.body.type",
"discipline": "req.body.discipline",
"price_options": "req.body.price_options",
"price": "req.body.price",
"addon_prompt": "req.body.addon_prompt",
"addons": "req.body.addons",
"ship_price": "req.body.ship_price",
"keycode_bank": "req.body.keycode_bank",
"card_type": "req.body.card_type",
"options": {
"certificate_prompt": "req.body.certificate_prompt",
"student_to_instructor_ratio": "req.body.student_to_instructor_ratio",
"student_to_manikin_ratio": "req.body.student_to_manikin_ratio",
"electronic_signature": "req.body.electronic_signature"
},
"ceu_credits": "req.body.ceu_credits",
"description": "req.body.description",
"confirm_email": "req.body.confirm_email"
}
解决方案
问题在于if
您正在检查options
属性中的值,就好像它们出现在您在请求正文中发送的数据的顶层一样。
您也可以在使用没有类型强制的运算符时检查null
值。!=
如果您发送的数据是您随问题提供的数据,请将您的if
条件内容更改为(检查options
字段内的值,删除undefined
检查):
req.body.name != null && req.body.type != null && req.body.discipline != null && req.body.price_options != null
&& req.body.price != null && req.body.addon_prompt != null && req.body.addons != null && req.body.ship_price != null
&& req.body.keycode_bank != null && req.body.card_type != null && req.body.options != null && req.body.options.certificate_prompt != null
&& req.body.options.student_to_instructor_ratio != null && req.body.options.student_to_manikin_ratio != null && req.body.options.electronic_signature != null
并将创建newCourse
变量的位置更改为:
let newCourse = {
"name": req.body.name,
"type": req.body.type, //1: Classroom session enabled 2. No Classroom session
"discipline": req.body.discipline,
"price_options": req.body.price_options, //Registrations allowed with deposits or not?
"price": req.body.price,
"addon_prompt": req.body.addon_prompt,
"addons": req.body.addons, //add addons api values will be sent here
"ship_price": req.body.ship_price,
"keycode_bank": req.body.keycode_bank, //Keycode bank value will be sent here
"card_type": req.body.card_type, //Card type value will be sent here
"options": {
"certificate_prompt": req.body.options.certificate_prompt,
"student_to_instructor_ratio": req.body.options.student_to_instructor_ratio,
"student_to_manikin_ratio": req.body.options.student_to_manikin_ratio,
"electronic_signature": req.body.options.electronic_signature
}
}
现在您可以发送示例数据:
{
"name": "req.body.name",
"type": "req.body.type",
"discipline": "req.body.discipline",
"price_options": "req.body.price_options",
"price": "req.body.price",
"addon_prompt": "req.body.addon_prompt",
"addons": "req.body.addons",
"ship_price": "req.body.ship_price",
"keycode_bank": "req.body.keycode_bank",
"card_type": "req.body.card_type",
"options": {
"certificate_prompt": "req.body.certificate_prompt",
"student_to_instructor_ratio": "req.body.student_to_instructor_ratio",
"student_to_manikin_ratio": "req.body.student_to_manikin_ratio",
"electronic_signature": "req.body.electronic_signature"
},
"ceu_credits": "req.body.ceu_credits",
"description": "req.body.description",
"confirm_email": "req.body.confirm_email"
}
与邮递员一起,它应该可以工作。
推荐阅读
- node.js - Bleno 在二进制数据上引发索引超出范围错误
- python - 如何在 python 中创建散点图来描绘给定输出中的向量?
- python - 如何在单行 FOR 循环中简化列表数字的乘法?
- go - 根据外部(例如用户)输入更改 Uber Cadence 睡眠时间
- javascript - 上下文菜单 onclick AJAX POST 不起作用
- php - \Eloquent\Model::Create 方法返回 null,状态码 OK
- php - 如何在 VB.net 中转换 JSON 以便在 PHP 中使用
- swift - 仅当 loadRequest 在 viewDidLoad 之外时 UIWebView 的 Nil 错误
- unit-testing - Uber Cadence:如何断言对 workflow.Sleep() 的调用?
- cadence-workflow - Uber Cadence 本地活动与副作用