「オプション」というフィールド名があり、このフィールド自体に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"
}
郵便配達員と一緒に、それはうまくいくはずです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加