Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.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 - Fatal编程技术网

Javascript 未定义的解构和处理问题

Javascript 未定义的解构和处理问题,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有一个应用程序,我在其中创建后端API和前端客户端 我以后可能会遇到的一个潜在问题是在前端处理来自我的数据库(Mongo/Mongoose)的未定义的非结构化变量 请查看以下代码: const createCompany = asyncHandler(async (req, res) => { // Destructure body content const { name, streetAddress1, streetAddress2, city, state, zip

我有一个应用程序,我在其中创建后端API和前端客户端

我以后可能会遇到的一个潜在问题是在前端处理来自我的数据库(Mongo/Mongoose)的未定义的非结构化变量

请查看以下代码:

const createCompany = asyncHandler(async (req, res) => {
    // Destructure body content
    const { name, streetAddress1, streetAddress2, city, state, zip } = req.body;
    // Create new company
    const company = new Company({
        name,
        streetAddress1,
        streetAddress2,
        city,
        state,
        zip,
    });
    // Save new company to database
    const createdCompany = await company.save();
    // Send created company data to client
    res.status(201).json(createdCompany);
});
streetAddress2是我的公司模型中唯一不需要的值

我通过邮递员做了一个测试,公司创建正常,但是当我查询数据库时,我注意到“streetAddress2”键丢失了。这很好,因为我不需要它,也没有设置默认值

我的问题是,一旦我在React前端并通过Fetch接收数据,我应该如何处理可能丢失的streetAddress2值?有时它会在那里,有时不会。例如,我将有一个显示所有值(名称、streetAddress1、streetAddress2等)的表单

我计划以与上面代码中相同的方式对通过Fetch接收的数据进行解构

我假设一个简单的三元检查值是否存在就足够了,可以防止错误

在这种情况下,三元是一种最佳做法,还是应该为streetAddress2设置默认值“”

我是后端JavaScript新手,非常感谢您的反馈

编辑

非常感谢大家的反馈。提出的不同方法当然帮助我确定了处理这种情况的最佳方法

我还为更新公司创建了一个PUT路径,我将在下面展示。我在创作时使用了一些想法

// @desc    Update company by ID
// @route   PUT /api/companies/:id
// @access  Private
const updateCompany = asyncHandler(async (req, res) => {
    // Destructure body content
    const {
        name,
        streetAddress1,
        streetAddress2,
        city,
        state,
        zip,
        isActive,
    } = req.body;
    // Find company by ID
    const company = await Company.findById(req.params.id);
    if (company) {
        // Set updated values if they are defined
        company.name = name || company.name;
        company.streetAddress1 = streetAddress1 || company.streetAddress1;
        company.streetAddress2 = streetAddress2 || company.streetAddress2;
        company.city = city || company.city;
        company.state = state || company.state;
        company.zip = zip || company.zip;
        company.isActive = isActive || company.isActive;

        // Save company to database with updated information
        const updatedCompany = await company.save();
        // Send updated company to client
        res.json(updatedCompany);
    } else {
        res.status(404);
        throw new Error("Company not found");
    }
});

我会这样做:

apiCall()
.then(response=>{
   const {   name,streetAddress1,streetAddress2,city,state,zip} = response.data
   const  mapedCompanyObject=  {  
        name,
        streetAddress1,
        streetAddress2:streetAddress2?streetAddress2:'',
        city,
        state,
        zip
       }
})
.catch(err=>console.log(err))

我会这样做:

apiCall()
.then(response=>{
   const {   name,streetAddress1,streetAddress2,city,state,zip} = response.data
   const  mapedCompanyObject=  {  
        name,
        streetAddress1,
        streetAddress2:streetAddress2?streetAddress2:'',
        city,
        state,
        zip
       }
})
.catch(err=>console.log(err))

您可以将默认值应用于
streetAddress2

const company = new Company({
    name,
    streetAddress1,
    streetAddress2 || '',
    city,
    state,
    zip,
});

您可以将默认值应用于
streetAddress2

const company = new Company({
    name,
    streetAddress1,
    streetAddress2 || '',
    city,
    state,
    zip,
});

Mongoose允许您在未定义的情况下设置字段,因此您可以在
公司
模式中执行类似操作-

streetAddress2: {
    type: String,
    default: ''
}

Mongoose允许您在未定义的情况下设置字段,因此您可以在
公司
模式中执行类似操作-

streetAddress2: {
    type: String,
    default: ''
}

非常感谢你!非常感谢你!非常感谢你!非常感谢你!非常感谢你!非常感谢你!