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

在Node.js上响应客户端的正确方式?,node.js,error-handling,response,server-side,Node.js,Error Handling,Response,Server Side,这是我第一次尝试构建服务器 我已经设置了一个服务器来处理联系人表单提交,其中还包括预定义的验证码字符串 当服务器接收到联系人表单时,如果captcha字符串是预期的,那么我希望它使用response.end(JSON.stringify(parsedURL)),简单地用解析的联系人表单查询的JSON进行响应 如果验证码字符串错误,我希望服务器响应“说”验证码错误,以便客户端要求用户重试。但我不知道怎么做 在服务器上: var httpServer = http.createServer(func

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

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

当服务器接收到联系人表单时,如果captcha字符串是预期的,那么我希望它使用
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");
   }
});
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"..
   }
}); 
在客户端上:

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");
   }
});
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"..
   }
}); 
当我使用
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;

        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");
   }
});
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"..
   }
}); 
在客户端上:

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");
   }
});
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代码上的“错误”块处理)还是作为“成功”发送用适当的信息说明实际发生了什么?

我认为您需要做的是
设置响应的标题

以下是一个例子:

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

更多信息,请参阅。

这个问题似乎在这里有答案:我看到了,但我没有使用express,我正在尝试先学习Node.js,然后再逐步升级。这个代码示例看起来是正确的,但是,我建议做两个轻微的修改:首先,使用403状态代码,而不是404。第二,保留原始的“错误验证码”正文内容,因为它向客户端描述了问题。为了回答更大的问题,通常认为在请求出现问题时返回成功的200响应是一种不好的做法。这只是一个简单的演示,您可以更改它以满足您的需要。我最终发送了这样的响应:
response.writeHead(403,{“Content Type”:“text/plain”});响应。结束(“错误验证码”)可以吗?顺便说一句,Troy,您建议的403代码会在浏览器控制台上显示一个错误(至少在Chrome上)。可以吗?我怎样才能避免呢?我相信这样的控制台错误会破坏IE,对吗?我认为403(禁止)状态在这种情况下似乎有点“苛刻”//太多了,不是吗?