2017-01-24 7 views
0

私が書いた小さなノードサーバーにデータの一部を入れようとしています。次のようにTypeError:nullのプロパティ 'save'を読み取ることができません

サーバー側のコードは次のとおりです。

router.route('/returnLockID').put(function(req, res){ 
mongoOp.findOne({ 
    name: req.body.name 
}, function(err, user) { if(err) { 
    response = {"error" : true,"message" : "Error fetching data"}; 
} else { 
// we got data from Mongo. 
// change it accordingly. 
    if(req.body.LockID !== undefined) { 
     // case where ID needs to be updated. 
     user.LockID = req.body.LockID; 
    } 
    // save the data 
    user.save(function(err){ 
     if(err) { 
      response = {"error" : true,"message" : "Error updating data"}; 
     } else { 
      response = {"error" : false,"message" : "Data is updated for "+req.body.name}; 
     } 
     res.json(response); 
    }) 
} 
}); 
    }) 

私は応答を取得:

{ 
    "error": false, 
    "message": "Data is updated for nv942" 
} 

しかし、データが更新されません。誰かが私が貯蓄に間違っているのを見ることができますか?

TypeError: Cannot read property 'save' of null 
    at /Users/NikhilVedi/Documents/FYP/Server/lockserver/routes/users.js:92:13 
    at Query.<anonymous> (/Users/NikhilVedi/Documents/FYP/Server/lockserver/node_modules/mongoose/lib/model.js:3407:16) 
    at /Users/NikhilVedi/Documents/FYP/Server/lockserver/node_modules/kareem/index.js:259:21 
    at /Users/NikhilVedi/Documents/FYP/Server/lockserver/node_modules/kareem/index.js:127:16 
    at _combinedTickCallback (internal/process/next_tick.js:67:7) 
    at process._tickCallback (internal/process/next_tick.js:98:9) 

SWIFTコードは次のとおりです:

@IBAction func setup(_ sender: Any) { 

     if (UserDefaults.standard.value(forKey: "userIP") == nil) 
     { 
      //make this a message box and stop the program crashing by assigning user defaults a value 
      UserDefaults.standard.set("localhost", forKey: "userIP") 

      print("Local host programatically set"); 
     } 

     let u = UserDefaults.standard.value(forKey: "userIP")! 
     let name = UserDefaults.standard.value(forKey: "email")! 
     var request = URLRequest(url: URL(string: "http://\(u):3000/users/returnLockID")!) 
     request.httpMethod = "PUT" 
     let postString = "LockID=\(LockID.text!)name=\(name)" 
     print(postString) 
     request.httpBody = postString.data(using: .utf8) 
     let task = URLSession.shared.dataTask(with: request) { data, response, error in 
      guard let data = data, error == nil else {             // check for fundamental networking error 
       print("error=\(error)") 
       return 
      } 

      if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {   // check for http errors 
       print("statusCode should be 200, but is \(httpStatus.statusCode)") 
       print("response = \(response)") 
      } 

      let responseString = String(data: data, encoding: .utf8) 
      // print("responseString = \(responseString)") 

      if let data = responseString?.data(using: String.Encoding.utf8) { 
       let resString = JSON(data: data) 

       if resString["success"].stringValue == "true" 
       { 
        print("works"); 

       } 
       else if resString["success"].stringValue == "false" 
       { 
        print("failed") 
        print(resString["message"].stringValue) 
        //dismiss window and set bool to true 
        UserDefaults.standard.set(true, forKey: "LockIDPresent") 
        self.dismiss(animated: true, completion: nil); 
       } 

      } 

     } 
    task.resume() 
      } 

感謝し、私は私が手のiOSからPUTしようとすると、それはすべて私が郵便配達を使用して置くとき罰金を通過

は、私は、しかし、保存することができますあらかじめ!

答えて

0

1つのエラーが表示されますが、最初のif文節にres.json(response);を実行する必要があります。

req.body.LockIDの値が指定されているかどうかにかかわらず、saveを呼び出していることに注意してください。ユーザーが変更されずに保存されている場合は、値がreq.body.LockIDである場合は、ユーザーの電子メールが更新されていない可能性があります。

+0

さらに、彼はbodyのlockIdではなく電子メールを割り当てます。user.LockID = req.body.userEmail; –

+0

はい、私はそれを見ましたが、私は彼のビジネスに精通していないので言及しませんでした論理、それは意図的かもしれません...確信が持てません。 – GPicazo

+0

ありがとう!すぐにPUTしてPostman経由で正常に保存できますが、すぐにエラーが発生します。私は質問を更新しました。 – CS456

関連する問題