在Node.js上响应客户端的正确方法?

时间:2014-10-11 01:31:30

标签: node.js error-handling response server-side

这是我第一次尝试构建服务器......

我已经设置了一个服务器来处理联系表单提交,其中还包含预定义的验证码字符串。

当服务器收到联系表单时,如果验证码字符串是预期的字符串,那么我希望它只使用response.end(JSON.stringify(parsedURL));

使用已解析的联系表单查询的JSON进行响应

如果验证码字符串错误,我希望服务器响应“说”验证码错误,以便客户端要求用户再试一次。但我不知道该怎么做。

在服务器上:

var httpServer = http.createServer(function (request, response)
{
    if (/\/contactform\?....../.test(request.url))
    {
        var parsedURL = url.parse(request.url, true);
        var name  = parsedURL.query.name;
        var email  = parsedURL.query.email;
        var subject  = parsedURL.query.subject;
        var enquiry  = parsedURL.query.enquiry;
        var captcha = parsedURL.query.captcha;

        if (captcha !== "testing")
        {
           // send a "bad" response to the client and include the message "bad captcha"
        }   

        else response.end(JSON.stringify(parsedURL.query));
    }
}).listen(8080);

关于客户:

$.ajax({
   url: "/contactform?..............",
   success: function(msg)
   {
      console.log(msg);
   },
   error: function(msg)
   {
      // the "bad captcha" response should be handled here right ?
      console.log(msg); // which should be equivalent to console.log("bad captcha");
   }
});

当我使用response.end(JSON.stringify(parsedURL));时,客户端(jQuery)认为“成功”。

如何从服务器响应以便执行客户端上ajax请求的“错误”部分?

或者“错误”部分应该只处理服务器根本没有响应的情况,即服务器端出现严重错误的情况,例如异常,真正的错误,而不仅仅是我的情况服务器上的评估没有预期的结果?

我应该在两种情况下使用response.end(...);,如:

在服务器上:

var httpServer = http.createServer(function (request, response)
{
    if (/\/contactform\?....../.test(request.url))
    {
        var parsedURL = url.parse(request.url, true);
        var name  = parsedURL.query.name;
        var email  = parsedURL.query.email;
        var subject  = parsedURL.query.subject;
        var enquiry  = parsedURL.query.enquiry;
        var captcha = parsedURL.query.captcha;
        var response = JSON.stringify(parsedURL.query);

        if (captcha !== "testing") response = "bad captcha";

        response.end(response);
    }
}).listen(8080);

关于客户:

$.ajax({
   url: "/contactform?..............",
   success: function(msg)
   {
      console.log(msg); // msg will either be the stringified object or "bad captcha"..
   }
}); 

换句话说,当在服务器上成功接收到请求但服务器想让客户端知道某些内容丢失或者其他什么时,服务器的响应应该作为“错误”发送(即由“错误”阻止客户端的ajax代码)或作为“成功”,并在适当的消息中说出实际发生了什么?

1 个答案:

答案 0 :(得分:1)

我认为你需要做的是set headers of your response

以下是一个例子:

var body = 'Sorry!';
response.writeHead(404, {
  'Content-Length': body.length,
  'Content-Type': 'text/plain' });

有关详细信息,请参阅http://nodejs.org/api/http.html#http_response_writehead_statuscode_reasonphrase_headers