2017-11-22 4 views
0

입니다. /test에 POST하려면 node.js와 Postman을 사용하고 있습니다. 내가 toChange으로 필드 결과를 저장하고정의되지 않은 선언 결과. 원래 객체 및 세트 변수의 값이

설정할 : toChange.transaction.signature = element.transaction.signature;

toChange 변수의 값은 element.transaction.signature입니다. 그러나 toChange.transaction 또는 toChange.transaction.signature을 정의하면 선언은 undefined을 반환합니다. 왜 이런 일이 일어나는 걸까요? 어떻게 수정해야합니까? (server.js에서 사용 부)


:

logServer.post('/test', (req,res) => { 
    console.log('starting test'); 
    let assetID = req.jwtPayload.assetID; 
    logDB.collection('logs').find({"transaction.assetID" : assetID}).toArray((err, result) => { 

     if(err){ 
      console.log("Err : "+err.message); 
      db.close(); 
      respondWithJSON(500,500,err.message,res); 
      return; 
     } 

     result.forEach(function(element, index, array) { 

     let toChange = result.filter(function(e){return e._id === element._id}); //**HERE 
     console.log('toChange', toChange); 
     console.log('element.transaction.signature', element.transaction.signature); 
     console.log('element.transactionSignature', element.transactionSignature); 
     console.log('toChange.transaction', toChange.transaction); //**HERE 

     //toChange.transaction.signature = element.transaction.signature; //**HERE 
     //console.log('toChange.transaction.signature', toChange.transaction.signature); 
     }); 
    });  
     res.status(200).send('hello, I am Log test'); 
}); 

(CONSOLE.LOG 출력)가되도록해야

[stdout] starting test 
[stdout] toChange [ { _id: 1511359949, 
[stdout]  transaction: 
[stdout]  { actor: 'patman', 
[stdout]  type: 'Upload', 
[stdout]  assetName: 'benten40.txt', 
[stdout]  assetOwner: 'patman', 
[stdout]  signature: 'c7ac2d40-c41c-4cd6-88ed-51c309114f40', 
[stdout]  timeStamp: '2017-11-22T14:12:29.000Z', 
[stdout]  result: 'Success' }, 
[stdout]  transactionSignature: '632e61b5-a022-482c-a4c5-4940b53cb922' } ] 
[stdout] element.transaction.signature c7ac2d40-c41c-4cd6-88ed-51c309114f40 
[stdout] element.transactionSignature 632e61b5-a022-482c-a4c5-4940b53cb922 
[stdout] toChange.transaction undefined 

답변

0
Array.prototype.filter()

이 배열을 반환 do toChange[ 0 ].transaction. 그러나 하나의 요소 만 원하는 경우 Array.prototype.find()을 사용하십시오.

또한 _idObjectID 유형의 개체 일 가능성이 큽니다.

const obj1 = { a: 12 }; 
const obj2 = { a: 12 }; 
const obj3 = obj1; 

obj1 === obj2; // false 
obj1 === obj3; // true 

당신은 수동으로 양면에 toString() 전화를 걸거나 e._id.equals(element._id)을 사용할 수 있습니다 : 그들은 같은 객체 경우 개체에 대한 항등 연산자는 true를 반환합니다. eelement 모두 results_id 고유 온으로되는 것을 특징 그게

상기 _id개체는, 이러한 특정 실시 예에서 동일한 객체가 될 것이다. eelement도 같은 개체입니다.