2017-01-24 2 views
0

Я пытаюсь использовать некоторые данные на сервере небольших узлов, который я написал.TypeError: Невозможно прочитать свойство «сохранить» из нуля

код на стороне сервера выглядит следующим образом:

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" 
} 

Однако, данные не обновляются. Может ли кто-нибудь увидеть, где я ошибаюсь в экономии?

Все идет через штраф, когда я PUT с помощью почтальона, я могу сэкономить, однако, когда я пытаюсь PUT с прошивкой я получаю:

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) 

Стремительное код:

@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() 
      } 

Спасибо заранее!

ответ

0

Одна ошибка, которую я вижу, но вряд ли исправление вашей проблемы заключается в том, что вы должны делать res.json(response); в первом предложении оператора if.

Еще одно замечание заключается в том, что вы вызываете save независимо от того, предоставляется ли значение req.body.LockID, поэтому в тех случаях, когда он не является пользователем, он сохраняется без каких-либо изменений. Возможно, вы захотите распечатать значение или req.body.LockID, так как это может быть причиной того, что адрес электронной почты пользователя не обновляется.

+0

В дополнение к этому он присваивает электронное письмо не lockId тела 'user.LockID = req.body.userEmail;' –

+0

Да, я это видел, но не упоминал об этом, так как я не знаком с его бизнесом логики, так что это может быть преднамеренным ... не уверенным. – GPicazo

+0

Спасибо! Теперь я могу PUT и успешно сохранять почту через Postman, однако в быстром я получаю сообщение об ошибке. Я обновил вопрос. – CS456

Смежные вопросы