私は角度ノードの評価システムを構築しています。そのシステムでは、POST reqとしてサーバーに送信されたIDの配列をループし、forループを使用してこれらのIDをプッシュしようとすると、ユーザーは列を評価する必要があります。"TypeError:複数のリクエストに対して 'push' nullの属性を読み取ることができません
最初のユーザーはループ全体を正常に取得していますが、次のユーザーは2番目のインデックスで失敗します。デバッグ後、私はバックエンドがすべての正しい変数を受け取っていることを発見しました。私はなぜユーザー2のためには機能しないのか分かりませんが、ユーザー1のためです。ここで
は、ここに私のバックエンドのコード
addRatee: function addRatee(req,res) {
var decoded = jwt.decode(req.query.token);
return model.User.findById(req.params.raterId)
.then(function (user) {
for (let ratee of req.body.rateeIds) {
user.needToRate.push(ratee);
}
user.update({
needToRate: user.needToRate
}).then(function (updatedUser) {
return res.status(200).json({
title: "Successfully added users to need to rate",
obj: updatedUser
});
}).catch(function() {
return res.status(400).json({
message: "Error updating user",
error: err.toString()
});
});
}).catch(function (e) {
return res.status(400).json({
message: "Error finding user",
error: e.toString()
});
});
}
はここに私のコンポーネントのサービスコード
addRatee(rateeIds: number[], raterId: number) {
const headers = new Headers({'Content-Type': 'application/json'});
const token = localStorage.getItem('token')
? '?token=' + localStorage.getItem('token')
: '';
const body = {
rateeIds: rateeIds
};
return this.http.patch(this.devUrl + '/new-ratee/' + raterId + token, body, {headers: headers});
}
されている私のcomponent.tsコードが
あるlet dRateeIds = [this.trip.rider1Id, this.trip.rider2Id, this.trip.rider3Id];
let r1RateeIds = [this.trip.driverId, this.trip.rider2Id, this.trip.rider3Id];
let r2RateeIds = [this.trip.rider1Id, this.trip.driverId, this.trip.rider3Id];
let r3RateeIds = [this.trip.rider1Id, this.trip.rider2Id, this.trip.driverId];
this.tripService.addRatee(dRateeIds, this.trip.driverId)
.subscribe(updatedUser => {
console.log(updatedUser);
this.tripService.addRatee(r1RateeIds, this.trip.rider1Id)
.subscribe(updatedUser2 => {
console.log(updatedUser2);
this.tripService.addRatee(r2RateeIds, this.trip.rider2Id)
.subscribe(updatedUser3 => {
console.log(updatedUser3);
this.tripService.addRatee(r3RateeIds, this.trip.rider3Id)
.subscribe(updatedUser4 => {
console.log(updatedUser4);
}, resp => console.log(resp));
}, resp => console.log(resp));
}, resp => console.log(resp));
}, resp => console.log(resp));
私はにかなり新しいですよ私のコードは混沌としているので、このエラーが発生する理由を探しています。
ここには完全なエラースタックがあります。
{"message":"Error finding user","error":"TypeError: Cannot read property 'push' of null\n at /Users/jonathancorrin/Desktop/workspace/atlas-web/server/controllers/trips.js:1380:24\n at tryCatcher (/Users/jonathancorrin/Desktop/workspace/atlas-web/node_modules/bluebird/js/release/util.js:16:23)\n at Promise._settlePromiseFromHandler (/Users/jonathancorrin/Desktop/workspace/atlas-web/node_modules/bluebird/js/release/promise.js:512:31)\n at Promise._settlePromise (/Users/jonathancorrin/Desktop/workspace/atlas-web/node_modules/bluebird/js/release/promise.js:569:18)\n at Promise._settlePromise0 (/Users/jonathancorrin/Desktop/workspace/atlas-web/node_modules/bluebird/js/release/promise.js:614:10)\n at Promise._settlePromises (/Users/jonathancorrin/Desktop/workspace/atlas-web/node_modules/bluebird/js/release/promise.js:693:18)\n at Async._drainQueue (/Users/jonathancorrin/Desktop/workspace/atlas-web/node_modules/bluebird/js/release/async.js:133:16)\n at Async._drainQueues (/Users/jonathancorrin/Desktop/workspace/atlas-web/node_modules/bluebird/js/release/async.js:143:10)\n at Immediate.Async.drainQueues (/Users/jonathancorrin/Desktop/workspace/atlas-web/node_modules/bluebird/js/release/async.js:17:14)\n at runCallback (timers.js:781:20)\n at tryOnImmediate (timers.js:743:5)\n at processImmediate [as _immediateCallback] (timers.js:714:5)"}
これは、いくつかの失敗した試行の後で私のpgadminテーブルの外観です。コンフィギュレーション前needsToRate列とレートに値型
USERの必要性をログイン時にここでユーザー2-4
****** UPDATE ためのものであるNULL値は値が記録されます====== null USER TYPE NTR ==========オブジェクト