Javascript 未定义的解构和处理问题
我有一个应用程序,我在其中创建后端API和前端客户端 我以后可能会遇到的一个潜在问题是在前端处理来自我的数据库(Mongo/Mongoose)的未定义的非结构化变量 请查看以下代码: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
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: ''
}
非常感谢你!非常感谢你!非常感谢你!非常感谢你!非常感谢你!非常感谢你!