2014-10-11 4 views
0

Это моя первая попытка создания сервера ...Правильный способ ответа на клиент на Node.js?

Я установил сервер для обработки заявки на контактную форму, которая также включает в себя предопределенную строку отслеживания.

Когда сервер получает контактную форму, если строка расшифрованы от ожидаемого, то я хочу, чтобы просто реагировать с JSON из разобранного контактной формы запроса с использованием response.end(JSON.stringify(parsedURL));

Если строка расшифрованы неправильно, я хотите, чтобы сервер ответил «говоря», что ошибка была неправильной, поэтому клиент просит пользователя попробовать еще раз. Но я не знаю, как это сделать.

на Сервере:

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".. 
    } 
}); 

Другими словами, когда запрос успешно получен на сервере, но сервер хочет t клиент знает, что что-то пропало или что-то еще, если ответ от сервера будет отправлен как «ошибка» (т. обрабатывается блоком «ошибка» в коде ajax клиента) или как «успех» с соответствующим сообщением о том, что на самом деле произошло?

+0

Кажется, что у этого вопроса есть ответы здесь: http://stackoverflow.com/questions/14154337/how-to-send-a-custom-http-status-message-in-node-express – xShirase

+0

Я видел это, но Я не использую выражение, я сначала изучаю Node.js, а затем строю свой путь. –

ответ

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 для получения дополнительной информации.

+0

Этот пример кода выглядит правильно, однако я бы предложил две небольшие модификации: во-первых, используйте код состояния 403 вместо 404. Во-вторых, сохраните свой исходный контент «плохой капчей», так как он описывает проблему для клиента.И чтобы ответить на более широкий вопрос, обычно считается, что плохая практика возвращает успешный ответ 200, когда на самом деле возникла проблема с запросом. –

+0

Это просто демонстрация, и вы можете изменить ее в соответствии с вашими потребностями. – creeper

+0

Я отправил свой ответ так: 'response.writeHead (403, {" Content-Type ":" text/plain "}); response.end («bad captcha»); «Это нормально? Кстати, Трой, 403-й код, который вы предложили, выдает сообщение об ошибке на консоли браузера (по крайней мере, в Chrome). Это нормально? Как я могу избежать этого? Я считаю, что консольные ошибки, например, могут прерывать IE, например, правильно? Я думаю, что 403 (запрещенный) статус кажется немного «суровым»/слишком много в этом сценарии, не так ли? –

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