[英]Node.JS Joi casts error for unknown object
我正在運行Node.JS和Joi(包括express-joi-middleware),並試圖靜默忽略未知對象或剝離它們。 但是,無論我做什么都會返回錯誤。
const options = { wantResponse: false, stripUnknown: true };
app.post('/my-post', expressJoiMiddleware(testSchema, options), (req, res) => {
...
和
const options = { wantResponse: false, allowUnknown: true };
app.post('/my-post', expressJoiMiddleware(testSchema, options), (req, res) => {
...
給我:
{
"error": [
{
"message": "\"test\" is not allowed",
"path": "body.test",
"type": "object.allowUnknown",
"context": {
"child": "test",
"key": "test"
}
}
]
}
似乎可以使用:
const options = { wantResponse: false, joiOptions: { stripUnknown: true }};
每當將Joi驗證添加到路由,有效負載或參數時,它都會嚴格檢查屬性。 .required()
表示該屬性是必需的,但是,如果架構中未提及該屬性,則它將其視為違規並引發該錯誤。
為了讓Joi正常工作,您需要定義所有可能使用的東西。 這就是模式的定義-結構的所有字段的定義:是否需要。
我對Hapi.js
遇到了同樣的問題,並將該屬性添加到架構中以對其進行修復。
一個簡單的例子是:
{
user: Joi.string().required(),
pass: Joi.string().required()
}
對於此路由 ,如果僅傳遞user
或pass
,則它將失敗,因為也需要另一個。 但是,如果您嘗試傳遞一個name
,它將再次因您收到的錯誤而失敗,因為Joi無法識別該屬性。 將其視為完整性檢查,這樣就不會將“惡性”字段作為有效負載傳遞。
如果將以上架構更改為:
{
...
name: Joi.string()
}
Joi毫無疑問會通過它,因為這樣您就會知道name
是您可以期望的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.