私は、適切なパラメータを持つすべてのput要求とpost要求を検証するミドルウェアをいくつか持っています。私のmochaテストは私のアップデートルートでは失敗し、デバッグ後は私のルータが私の検証ミドルウェアからアップデートリクエストを受けないので認識しましたが、すべてのポストでうまく動作し、同じ場所にミドルウェアをマウントします同じように、時間も同じです。誰でも問題を見つけることができますか?下に私のテストコード、バリデーションミドルウェア、ルートをマウントする場所があります。 server.jsでapp.put( 'url'、middleware)はミドルウェアExpress NodeJを実行しません
:
//400 middleware
//this mounts the middleware succesfully
app.post('/:table', helper.validateParameters);
//this doesn't
app.put('/:table', helper.validateParameters);
私のテストファイルで:
it('should return a 400 error if no parameters are passed', (done) =>{
debugger;
//this runs through the validation middleware
request(app)
.post('/item/')
.set('Authorization', testSuite.tokenHeader)
.expect(400)
.end(done);
});
...
it('should return a 400 error if no parameters are passed', (done) => {
debugger;
//this doesn't
request(app)
.put(testSuite.realItemUrl)
.set("Authorization", testSuite.tokenHeader)
.expect(400)
.end(done);
});
helper.jsで:
let validateParameters = (req, res, next) => {
debugger;
//The route handler never enters here when handling Item.put requests
if (!checkProperties(req.params.table, req.body.params)) {
//winston.log?
return next(ErrorTypes.badRequest());
}
else {
return next();
}
}
...
let checkProperties = (table, params) => {
if (!params) {
return false;
}
var requiredProperties = [];
switch(table) {
case 'item':
requiredProperties = Object.keys(Item.schema.obj);
break;
case 'match':
requiredProperties = Object.keys(Match.schema.obj);
break;
case 'user':
requiredProperties = Object.keys(User.schema.obj);
break;
}
return Object.keys(params).every(parameter => {
return requiredProperties.includes(parameter);
});
}
'testSuite.realItemUrl'の値を確認しましたか? PUTリクエストにはどんな反応がありますか? – mscdex
私は現在、デバッグ中です(更新リクエストで送信されたパラメータはありません)。私は "200 ok"応答を返します。これはおそらくクエリーが空のパラメーターで処理され、mongoは何も変更しなかったので「okay」で応答するからです。したがって、操作は通常の更新のように進みますが、ミドルウェアでは停止していたはずです。 –
半関連のノートでは、 'req.body.params'が既に存在するので、' validateParameters() 'に' req.body.params && 'の代わりに 'req.params.table &&'本当の理由は、 '!req.body.params || '。私はそれが問題の原因だとは思わない。 'req.body.params'は設定されていますか?もしそうなら、 'checkProperties()'は責任を負いますか?あなたのボディパーサーミドルウェアはどのように定義されていますか?PUTリクエストにもあてはまりますか? – mscdex