簡體   English   中英

關於解構和處理未定義的問題

[英]Question on destructuring and handling undefined

我有一個應用程序,我正在創建后端 API 和前端 React 客戶端。

我以后可能會遇到的一個潛在問題是關於在前端處理來自我的數據庫 (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 是我公司 model 中唯一不需要的值。

我通過 Postman 進行了測試,公司創建正常,但是當我查詢數據庫時,我注意到缺少“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))

您可以將默認值應用於streetAddress2

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

Mongoose 允許您在未定義的情況下為字段設置default values ,因此您可以在Company模式中執行類似的操作 -

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM