2016-09-05 4 views
0

Я использую узел для создания спокойного api и запутался при отправке ответа.отправить ответ и остановить дальнейшее выполнение кода в nodejs

Ниже приведен пример кода:

router.post('/', function(req, res) { 

    var mobileRegex=/^\d{10}$/; 

    if (!mobileRegex.test(req.body.mobile)){ 
     res.json({status:'success',type:false,msg:'Invalid Mobile'}); 
     // I dont want further execution of code after this but still it continues and prints data not defined 
     // OR 
     return res.json({status:'success',type:false,msg:'Invalid Mobile'}); 
     //but works if I specify return before it 
    } 
    var data={...}; 
    signupModel.createUser(data,function(err,result){ 
    if(err) 
     { 
     res.json({status:'success',type:false,msg:'....'}); 
     } 
     else 
     { 
     res.json({status:'success',type:false,id:'....'}); 
     } 
}); 

Когда я не указываю возвращение во время моей неудачной мобильной связи проверки продолжает дальнейшее выполнение кода и печатает «данные не определено» в консоли, но Invalid мобильное сообщение является JSON правильно отправлять клиенту без ошибок.

Я смущен, что нужно для правильного использования при создании api в nodejs. Моя проблема заключается в том, что запрос не должен обрабатываться после отправки ответа. Также, если конец ответа возвращается, я должен использовать return везде, когда я отправляю ответ json клиенту во всех случаях.

Я видел Nodejs difference between 'res.json(..)' and 'return res.json(..)' нити, но его волнуют промежуточный слой, но в моем случае нет ни

+0

Используйте возврат в любом месте, где вы хотите остановить дальнейшее выполнение промежуточного изделия! И нет необходимости называть его после res.send(), просто «return res.send()» будет работать! – Ali

ответ

0

Вы можете добавить return заявления после res.json(). res.json() просто устанавливает ответ. Он не отправляет ответ.

if (!mobileRegex.test(req.body.mobile)){ 
    return res.json({status:'success', type:false, msg:'Invalid Mobile'}); 
} 
+0

Так ли это правильно, если я укажу return после каждого ответа json, который я отправляю клиенту, потому что res.json в конечном итоге вызывает res.send, но задает тип содержимого. – Vibhas

+0

Исправить. Но вам не нужно добавлять возвращение везде. Например, в вашем текущем коде вам не нужно добавлять return после res.json() в 'if-else', потому что после этого ничего не выполняется. –

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