在Node.js上响应客户端的正确方式?
这是我第一次尝试构建服务器 我已经设置了一个服务器来处理联系人表单提交,其中还包括预定义的验证码字符串 当服务器接收到联系人表单时,如果captcha字符串是预期的,那么我希望它使用在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
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(禁止)状态在这种情况下似乎有点“苛刻”//太多了,不是吗?