آموزش جاوااسکریپت › انجمن ها › Nodejs › مشکل در قسمت 12
- این موضوع 1 پاسخ، 2 کاربر را دارد و آخرین بار در 3 سال، 11 ماه پیش بدست علی بهروزرسانی شده است.
-
نویسندهنوشتهها
-
MR.Mostafaمشارکت کننده
سلام
توی قسمت 12 (global config) دقیقه 8:50 حدودا شما روش کدنویسی رو تغییر میدید ولی وقتی فرم رو خالی سابمیت میکنید، ارور میده
توی ویدئوهم ارور رو سرور نود لاگ انداخته ولی فکر کنم متوجه ارور نشدید
این ارورها هست:JavaScript123456789(node:47068) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the clientat ServerResponse.setHeader (_http_outgoing.js:485:11)at ServerResponse.header (C:\Users\Mostafa\Desktop\reactapp-nodeJS\node_modules\express\lib\response.js:771:10)at ServerResponse.location (C:\Users\Mostafa\Desktop\reactapp-nodeJS\node_modules\express\lib\response.js:888:15)at ServerResponse.redirect (C:\Users\Mostafa\Desktop\reactapp-nodeJS\node_modules\express\lib\response.js:926:18)at RegisterController.registerProcess (C:\Users\Mostafa\Desktop\reactapp-nodeJS\app\http\controller\auth\registerController.js:20:9)at processTicksAndRejections (internal/process/task_queues.js:93:5)(node:47068) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)(node:47068) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.برای رفع این ارورها توی استک جستجو گرفتم و گفته بودن اکپرسس به صورت دیفالت از promises پشتیبانی نمیکنه و باید rejections ها رو خودمون پیاده سازی کنیم. این کار رو به این صورت انجام دادم و مشکل برطرف شد.
خواستم خدمتتون ارسال کنیم تا شما هم بررسی بفرمایید، اگر مشکلی وجود داره بفرمایید.تغییرات فایل controller.js (در مسیر : \app\http\controller\controller.js)
JavaScript12345678910111213async validationRecaptcha(req, res) {return new Promise((resolve, reject) => {this.recaptcha.verify(req, (error, data) => {if (error) {req.flash('errors', 'گزینه امنیتی فعال نمیباشد.');res.redirect('/auth/register');reject(error);} else {resolve(data);}});});}تغییرات فایلregisterController (در مسیر: \app\http\controller\auth\registerController.js)
JavaScript12345678910111213async registerProcess(req, res, next) {try {await this.validationRecaptcha(req, res);const result = await this.validationForm(req, res);if (result) {this.register(req, res, next);} else {res.redirect('/auth/register');}} catch (err) {next();}}با انجام این دو تغییر، هیچ کدوم از این ارورها رو دیگه نمایش نمیده.
آیا این تغییرات به درستی انجام شده یا اشتباه هست؟
ممنون میشم راهنمایی بفرمایید.علیمشارکت کنندهسلام میشه گفت پاسخ این تاپیک رو در تاپیک قبلی هم دادم تغییراتی که دادین کاملا درسته و حتما باید به همین شکل نوشته بشه در رابطه با ارور اول که در جلسات بعد از این برطرف شده. و ارور دومی که کاملا درسته به این دلیل که باید حتما captcha و validation فرم چک بشه بعد عمل register انجام بشه باید حتما به صورت غیرهمزمان با استفاده از async/await این فرایند رو انجام بدین.
ممنونم که این تاپیک رو ایجاد کردین. -
نویسندهنوشتهها