我們有一個使用 express 和 body-parser 的基于 NodeJS 的應用程式。服務器正在偵聽 JSON 格式的 REST 請求。我們遇到了一個問題,即請求中的某些字符被 HTML/XML 轉義,我們強烈懷疑 express 或 body-parse 端的某些東西正在這樣做,但我們無法弄清楚這是什么。
在我們的測驗場景中,我們使用 curl 發出請求:
curl 'http://localhost:6009/stores/1561289s12' \ ajmas@ghostwalker-echo
-X 'PUT' \
-H 'Accept: application/json, text/plain, */*' \
-H 'Content-Type: application/json; charset=utf-8' \
--data-raw $'{"name":"O\'Neil"}' \
--compressed
在服務器上,當我們查看 中的name值時req.body,結果為:
O'Neil
導致我們將手指指向 express 或 body-parser 的原因是,當我們使用 Wireshark 進行檢查時,我們會看到發送的正文。
我們初始化 JSON 決議如下:
app.use(express.json({}));
- Express 版本是 4.17.1
- 節點 JS 版本:14.15.1
該專案還使用了 express-validator。
任何人都可以提出任何可能導致此問題的建議嗎?
uj5u.com熱心網友回復:
需要注意的一件事是express-validator不僅僅是驗證,還可以修改或“清理”資料。出于這個原因,如果在接收和查看 中的值之間有任何修改req.body,那么檢查驗證器的設定是一個很好的起點。
在這種情況下,行為可以歸因于escape: true或escape(),它將 HTML 樣式物體應用于值。
快速驗證器中的消毒示例:
export default [
body('name').trim().escape()
]
export default {
name: {
in: ['body'],
trim: true,
escape: true
}
洗掉 'escape' 選項或函式呼叫將解決此問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343856.html
上一篇:將supertest與jest和express一起使用時,在請求標頭中設定身份驗證令牌
下一篇:如何在HDFS中合并部分檔案?
