Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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
Javascript 是否可以使用';默认值';创建对象时的属性?_Javascript_Node.js_Mongodb_Mongoose_Request - Fatal编程技术网

Javascript 是否可以使用';默认值';创建对象时的属性?

Javascript 是否可以使用';默认值';创建对象时的属性?,javascript,node.js,mongodb,mongoose,request,Javascript,Node.js,Mongodb,Mongoose,Request,我有一个具有多个属性(如address、shippingAddress和billingAddress)的Customer对象,如果客户没有传递任何额外的装运/账单地址数据,我需要将地址数据作为默认值复制到此属性中 我已经有了一个解决方案,它是有效的,但也许有人有一个更干净的方法。我用default:this.address尝试了它,但它不起作用 /model/customer.js const customerSchema = new mongoose.Schema({ address:

我有一个具有多个属性(如address、shippingAddress和billingAddress)的Customer对象,如果客户没有传递任何额外的装运/账单地址数据,我需要将地址数据作为默认值复制到此属性中

我已经有了一个解决方案,它是有效的,但也许有人有一个更干净的方法。我用
default:this.address
尝试了它,但它不起作用

/model/customer.js

const customerSchema = new mongoose.Schema({
    address: {
        type: addressSchema,
        required: true,
    },
    shippingAddress: {
        type: addressSchema
    }
});

customerSchema.methods.setShippingAddress = function(address, shippingAddress) {
    return (shippingAddress) ? shippingAddress : address;
}
/routes/customers.js

router.post('/', (req, res) => {
    let customer = new Customer({
        address: req.body.address
    });

    customer.shippingAddress = customer.setShippingAddress(req.body.address, req.body.shippingAddress);

    customer = await customer.save();
    res.status(200).send(customer);
});

因此,当API收到POST请求时,我实际上只是检查请求中是否传递了shippingAddress属性,如果没有传递,那么我只是用
地址覆盖
。shippingAddress=
,您应该能够使用中描述的基于函数的默认值。在你的情况下是这样的

const customerSchema = new mongoose.Schema({
    address: {
        type: addressSchema,
        required: true,
    },
    shippingAddress: {
        type: addressSchema,
        default: function() { return this.address; }
    }
});

没有错误,但不会将
地址
数据复制到
发货地址
属性中。我已经尝试在addressSchema(类)中创建一个静态函数来设置值,但是我无法将请求中传递的数据放入其中…我的坏。。。。我被
()=>
弄得心烦意乱。我忘记了在arrow函数中不能使用
this
语句。所以我把它改成了
default:function(){if(!this.shippingAddress)return this.address;}
@AlexSchwifty啊,关于arrow函数和这个绑定,你是对的。我已经根据你的评论更新了答案。是否需要(!this.shippingAddress)
-部件的
?只有当属性没有值时才应用默认值。你是对的,在我看来,总是重复检查只是一个坏习惯。。。不需要if语句。非常感谢。