iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
自我挑戰組

學習NodeJS的30天系列 第 30

Day30 NodeJS實作 IV & 鐵人賽最終章

終於來到第30天,今天要有始有終的把實作的編輯功能完成,一樣會以NodeJS的部份為主。

在編輯的功能一樣是透過兩個post()方法的中介層做請求資料的處理與回傳資料,依據前端傳遞的資料類型使用不同的parser,這裡使透過use()方法使用Express內建的json()方法,將請求的資料req.body解析為JSON格式字串,並建立一個UpdateItem()方法用以更新資料庫資料。另外建立一個全域變數updateRes作為更新後回傳的訊息,並以JSON格式字串回傳。

var updateRes;
app.use(express.json());
app.post("/api/updateItem", (req, res, next) =>{
    updateItem(req.body).then(next);
});

app.post("/api/updateItem", (req, res) =>{
    res.end(JSON.stringify({data: updateRes}));
});

接著定義UpdateItem()函式的內容,以mongoose套件建立資料庫連線,使用replaceOen()透過前端請求的ID篩選要更新的資料與給定更新的資料內容,並以exec()執行,完成後指派訊息給全域變數updateRes

function updateItem(data){
    return new Promise((resolve, reject) => {
        mongoose.connect("mongodb://localhost:27017/todoProj")
            .then(() => {
                itemData.replaceOne({_id: data._id}, {
                    Title: data.Title,
                    Note: data.Note,
                    Date: data.Date,
                    Tag: data.Tag
                }).exec(function(err, item){
                    if (err!=null) return reject(err);
                    updateRes = "success";
                    resolve();
                });
            }).catch(err => {
                console.log(err);
                reject(err);
            });
    });
}

完賽心得

30天的挑戰終於完成,最能表達心情的只有一個字:累,每天8小時的工作加上晚上至少4小時起跳的學習加整理文章不可能不累,但是真的很扎實的學習了技術,每天除了看課程理解內容,有一些快速帶過的內容為了要正確呈現,也參考不少資料,很感謝網路上樂於分享經驗的各路強者工程師,不管遇到什麼問題或是不理解的總是能在網路上找到方向,除了獲得技術之外,也更深深的感到學無止盡...已經開始考慮接著著手學習React,最後幾天React的部份真的有點心虛,接下來會繼續努力的,雖然短時間應該不會再進行這種高強度挑戰,希望依然能維持繼續學習技術的心情,或許明年會再來挑戰一次,也謝謝大家30天來的閱讀。/images/emoticon/emoticon41.gif


上一篇
Day29 NodeJS實作 III
系列文
學習NodeJS的30天30

2 則留言

0
SunshineYen
iT邦新手 5 級 ‧ 2021-10-18 16:31:29

~恭喜完賽~

chwk iT邦新手 5 級 ‧ 2021-10-26 17:10:43 檢舉

/images/emoticon/emoticon37.gif

0
JYHsu
iT邦新手 5 級 ‧ 2021-10-19 13:00:35

恭喜恭喜!!

chwk iT邦新手 5 級 ‧ 2021-10-26 17:10:57 檢舉

/images/emoticon/emoticon41.gif

我要留言

立即登入留言