Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Firestore云函数在一个字段中添加多个字段_Node.js_Json_Google Cloud Functions - Fatal编程技术网

Node.js Firestore云函数在一个字段中添加多个字段

Node.js Firestore云函数在一个字段中添加多个字段,node.js,json,google-cloud-functions,Node.js,Json,Google Cloud Functions,我有一个字段名为“选项”,该字段本身包含8个不同的复选框值。我正在使用nodejs编写firestore云函数,以在存在此字段“Options”的集合中发布数据。到目前为止,这是我写的 exports.addCourse = functions.https.onRequest((req, res) => { res.set('Access-Control-Allow-Origin', 'http://localhost:4200'); res.set('Access-Con

我有一个字段名为“选项”,该字段本身包含8个不同的复选框值。我正在使用nodejs编写firestore云函数,以在存在此字段“Options”的集合中发布数据。到目前为止,这是我写的

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将其命中,但出现了一个错误“所有字段都是必需的”。我做错了什么?这是在“选项”字段中添加多个字段的正确方法吗

我通过postman发送的数据不是真实的数据,因为API中没有为属性提供特定的数据类型

资料


问题出在您的
if
条件中,您正在检查
选项
属性中的值,就好像它们来自您在请求正文中发送的数据的顶层一样

您也可以在使用
时检查
null
值=运算符

如果您发送的数据是随问题提供的数据,请将您的
If
条件内容更改为(检查
选项
字段内的值,删除
未定义的检查):

并将创建
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"

}

使用postman,它应该可以工作。

您确实可以使用JavaScript对象(如
options
)填充字段,它将保存为Firestore文档中的映射。什么是用户搜索?我猜是一个集合,但它似乎没有定义。您是否在Firebase控制台的云函数日志中看到任何错误?@RenaudTarnec是的,它是集合,在顶部定义。我刚刚在这里粘贴了云函数。我只需要知道我在代码中写的是对还是错?当我用postman和相应的值点击它时,这个代码是否正常工作?@RenaudTarnec我在postman和logs中都看到了400,在云函数日志中没有其他错误?乍一看,您的代码看起来不错。是否确实满足第一个if(req.body.name!=null&&req.body.type!=null…)的所有条件??你试过一个接一个地调试这个部分吗?如果你得到一个“所有字段都是必需的”错误,这意味着对于这个If块,条件是falsy。如果是Firebase错误(例如add()方法的错误),则会得到不同的错误。
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"

}