2014-11-04 112 views
0

我的服务器在数据库保存数据前检查,如果服务器无法将数据保存到数据库,它会发送错误信息。我的客户端应用程序中的 如何获取此错误并显示?如何在客户端获取服务器错误信息Node.js

这是我的客户端的HTTP请求 -

button.addEventListener('click', function(e) { 

      var service_ = service.value; 


      if (start_pick < end_pick) { 
       var jsondata = [{ 
        start_time : new Date(start_pick), 
        end_time : new Date(end_pick), 
        service : service_, 

       }]; 

       var xhr = Titanium.Network.createHTTPClient(); 
       xhr.setTimeout(10000); 

       xhr.open("POST", "url"); 
       xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
       xhr.send(JSON.stringify(jsondata)); 
       xhr.onerror = function(e) { 
        //Ti.API.debug(e.error); 
        // console.log(e.error) 
        Titanium.API.info("Error in connecting to server !!"); 
        alert("Error in connecting to server !!"); 
       }; 

       xhr.onload = function(e) { 
        //alert(e) 
        if (e.error) { 
         alert(this.responseText); 
        } else { 
         windowAddDataInvoce.close(); 
       } 


       }; 

这是我的服务器端的 “POST” 代码

app.post('/collections/:collectionName', function(req, res, next) { 
    console.log(req.body[0]) 
    req.collection.findOne({"service":req.body[0].service}, function(e, result){ 
     if(result){ 
     console.log(result); console.log(e) 
     res.send({error:"Task allrady exits"}) 
     } 
     else{ 
     req.collection.insert(req.body, {}, function(e, results){ 
     if (e) return next(e) 
     res.send(results) 

     }) 
     } 
    }) 

}) 

回答

1

你必须发送一个正确的HTTP状态。 在Express中,您将此作为第一个参数发送,因此:

res.send(500, errorMessage)或更新版本res.status(500).body(errorMessage)

除了200以外的其他所有状态,它应该在XHR-Request中触发错误回调。

+0

那么我怎么能从客户端得到错误消息? – kosala 2014-11-04 08:00:54

+0

在客户端获取错误消息的任何帮助 – kosala 2014-11-04 08:19:02

+0

错误消息位于响应的正文中。我不知道你的Titanium API把这些信息放在哪里 - 应该放在文档的某个地方。也许作为错误回调的第二个参数? 但是让我告诉你,从服务器发送实际错误消息到客户端是一种不好的模式 - 特别是没有堆栈跟踪或类似的东西,因为它可能会暴露您的服务器体系结构,从而使其成为安全威胁。在您的客户端上定义错误消息取决于服务器的HTTP状态。 – Charminbear 2014-11-04 08:42:57