<!DOCTYPE html>
    <html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
    <head>
<title>Cách dùng bộ lọc ngoại lệ Nest.js để xử lý lỗi</title>
<meta name="description" content="Cách dùng bộ lọc ngoại lệ Nest.js để xử lý lỗi - Savefile - Tin Tức -...">
<meta name="author" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :.">
<meta name="copyright" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :. [admin@nguoicodonvn2008.info]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Cách dùng bộ lọc ngoại lệ Nest.js để xử lý lỗi">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;www.nguoicodonvn2008.info&#x002F;vi&#x002F;news&#x002F;savefile&#x002F;kien-thuc-may-tinh&#x002F;cach-dung-bo-loc-ngoai-le-nest-js-de-xu-ly-loi-7658.html">
<meta property="og:site_name" content=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.">
<meta property="og:url" content="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-dung-bo-loc-ngoai-le-nest-js-de-xu-ly-loi-7658.html">
<link rel="shortcut icon" href="https://www.nguoicodonvn2008.info/favicon.ico">
<link rel="canonical" href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-dung-bo-loc-ngoai-le-nest-js-de-xu-ly-loi-7658.html">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/karaoke-dual/" title="Tin Tức - Karaoke Dual" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/nhac-tre/" title="Tin Tức - Nhạc trẻ" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tru-tinh/" title="Tin Tức - Trữ tình" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/nuoc-ngoai/" title="Tin Tức - Nước ngoài" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/remix/" title="Tin Tức - Remix" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tam-su-tinh-yeu/" title="Tin Tức - Tâm sự tình yêu" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tho-suu-tam/" title="Tin Tức - Thơ sưu tầm" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/cuoc-song/" title="Tin Tức - Cuộc sống" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/phan-mem/" title="Tin Tức - Phần mềm" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/kien-thuc-may-tinh/" title="Tin Tức - Kiến thức máy tính" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/hoc-tap/" title="Tin Tức - Học tập" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tai-lieu/" title="Tin Tức - Tài liệu" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/de-thi/" title="Tin Tức - Đề thi" type="application/rss+xml">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/style.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/news.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/custom.css" type="text/css">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/bootstrap.min.js" type="text/javascript">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/style.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://www.nguoicodonvn2008.info/themes/default/css/news.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/custom.css">
<style type="text/css">
	body{background: #fff;}
</style>
    </head>
    <body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">.&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.</h2>
		<p class="pull-right"><a title=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;." href="https://www.nguoicodonvn2008.info/">https://www.nguoicodonvn2008.info</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Cách dùng bộ lọc ngoại lệ Nest.js để xử lý lỗi</h1>
		<ul class="list-inline">
			<li>Thứ tư - 18/10/2023 00:48</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
		</div>
				<div class="imghome">
			<img alt="Cách dùng bộ lọc ngoại lệ Nest.js để xử lý lỗi" src="https://st.quantrimang.com/photos/image/2023/10/18/Nest-js-bo-loc-7.jpg" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p>Các ngoại lệ chưa được xử lý có thể gây ra sự nhầm lẫn và thất vọng cho người dùng. Tuy nhiên, bạn có thể giải quyết vấn đề này bằng các bộ lọc ngoại lệ.</p>

<p>&nbsp;</p>
<br />
<br />
<img alt="Bộ lọc ngoại lệ trong Nest.js" data-adbro-processed="true" data-i="0" data-src="https://st.quantrimang.com/photos/image/2023/10/18/Nest-js-bo-loc-7.jpg" data-was-processed="true" height="340" src="https://st.quantrimang.com/photos/image/2023/10/18/Nest-js-bo-loc-7.jpg" width="650" />
<p>Bộ lọc ngoại lệ Nest.js mang tới cách chặn và xử lý ngoại lệ trên toàn cầu hoặc trên cơ sở từng bộ điều khiển. Chúng cho phép bạn tập trung vào logic xử lý lỗi, định dạng các phản hồi lỗi và cung cấp xử lý lỗi nhất quán trên ứng dụng. Hãy cùng nhau tìm hiểu về các bộ lọc ngoại lệ và cách dùng chúng để xử lý lỗi ứng dụng phù hợp.</p>

<h2>Xử lý lỗi mặc định trong Nest.js</h2>

<p>Mặc định, Nest.js có một lớp ngoại lệ, xử lý mọi trường hợp ngoại lệ mà code ứng dụng không xử lý được.</p>

<p>Khi xảy ra lỗi chưa được xử lý trong ứng dụng, Nest.js sẽ phát hiện chúng và trả về báo lỗi 100 Internet Server tới client. JSON mà Nest.js trả về trong trường hợp này trông như sau:</p>

<pre id="pre0">
<code>{
  &quot;statusCode&quot;: 500,
  &quot;message&quot;: &quot;Internal server error&quot;
}</code></pre>

<p>Nếu đối tượng lỗi phát sinh từ code chứa&nbsp;<strong>statusCode</strong>&nbsp;và&nbsp;<strong>message</strong>, Nest.js sẽ trả về những giá trị này thay cho phản hồi mặc định.</p>

<p>Để tránh hành vi chung, gửi một phản hồi lỗi chi tiết hơn tới client, bạn cần chăm chỉ xử lý tất cả các lỗi có thể xảy ra trong ứng dụng. Bạn có thể đạt được điều này bằng bộ lọc ngoại lệ tùy chỉnh hoặc tích hợp sẵn của Nest.js.</p>
<iframe allowtransparency="true" data-google-container-id="a!2" data-google-query-id="CMiMu87l_oEDFTlcDwIdTuIFjg" data-load-complete="true" frameborder="0" height="174" hspace="0" id="aswift_1" marginheight="0" marginwidth="0" name="aswift_1" sandbox="" scrolling="no" vspace="0" width="694"></iframe>

<h2>Tạo một bộ lọc ngoại lệ tùy biến</h2>

<p>Ví dụ này sẽ thử tạo một bộ lọc xử lý tất cả các ngoại lệ HTTP. Bắt đầu với một file tên&nbsp;<strong>http.exception.ts&nbsp;</strong>và thêm các import sau vào nó:</p>

<pre id="pre1">
<code>import {
  ExceptionFilter,
  Catch,
  ArgumentsHost,
  HttpException,
} from &#039;@nestjs/common&#039;;

import { Request, Response } from &#039;express&#039;;</code></pre>

<p>Những import này phục vụ cho các mục đích sau:</p>

<ul>
	<li><strong>ExceptionFilter</strong>: một giao diện mô tả triển khai bộ lọc ngoại lệ.</li>
	<li><strong>Catch</strong>: Một decorator đánh dấu class làm một bộ lọc ngoại lệ Nest.</li>
	<li><strong>ArgumentsHost</strong>: Giao diện này cung cấp các phương thức để truy xuất các đối số được chuyển tới một trình xử lý. Nó cho phép bạn chọn nội dung thực thi phù hợp (ví dụ: HTTP, RPC, hoặc WebSockets) để truy xuất các đối số.</li>
	<li><strong>HttpException</strong>: Đây là một class xác định ngoại lệ HTTP Nest cơ bản.</li>
	<li><strong>Request &amp; Response</strong>: Chúng là những interface cho một truy vấn Express.js và đối tượng phản hồi tương ứng.</li>
</ul>

<p>Tiếp theo, tạo một class,&nbsp;<strong>HttpExceptionFilter</strong>, triển khai<strong>&nbsp;ExceptionFilter</strong>. Chú thích nó bằng decorator&nbsp;<strong>Catch</strong>&nbsp;để cho biết rằng nó xử lý HttpExceptions:</p>

<pre id="pre2">
<code>@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {}</code></pre>

<p>Tiếp theo, điền vào class với code này:</p>

<pre id="pre3">
<code>catch(exception: HttpException, host: ArgumentsHost) {
    // Lấy đối tượng phản hồi từ máy chủ đối số
    const ctx = host.switchToHttp();
    const response = ctx.getResponse&lt;Response&gt;();

    // ấy đối tượng phản hồi từ máy chủ đối số
    const request = ctx.getRequest&lt;Request&gt;();

    // Lấy code trạng thái từ ngoại lệ
    const status = exception.getStatus();

    // Gửi phản hồi JSON bằng đối tượng phản hồi
    response.status(status).json({
      statusCode: status,
      timestamp: new Date().toISOString(),
      path: request.url,
      message:
        exception.message
       || exception.getResponse()&#91;&#039;message&#039;&#93;
       || &#039;Internal Server Error&#039;,
    });
}</code></pre>

<p>Khối code này truy xuất các đối tượng truy vấn và phản hồi từ đối tượng ArgumentsHost và truy xuất thông tin liên quan từ ngoại lệ này. Nó trả về một phản hồi đối tượng JSON, kèm chi tiết về lỗi tới client.</p>
&nbsp;

<h2>Liên kết các bộ lọc ngoại lệ</h2>

<p>Bạn có thể liên kết một bộ lọc ngoại lệ với một trình điều khiển hoặc toàn bộ ứng dụng, theo nhu cầu.</p>

<p>Để liên kết một bộ lọc ngoại lệ toàn cục, đầu tiên nhập bộ lọc ngoại lệ vào file&nbsp;<strong>main.ts</strong>. Sau đó, chuyển phiên bản của bộ lọc ngoại lệ vào phương thức&nbsp;<strong>app.useGlobalFilters</strong>:</p>

<pre id="pre4">
<code>// main.ts
import { NestFactory } from &#039;@nestjs/core&#039;;
import { AppModule } from &#039;./app.module&#039;;
import { HttpExceptionFilter } from &#039;./exception/http.exception&#039;;

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // Liên kết bộ lọc với ứng dụng
  app.useGlobalFilters(new HttpExceptionFilter());

  await app.listen(4050);
}

bootstrap();</code></pre>

<p>Để liên kết một ngoại lệ với bộ điều khiển, nhập decorator&nbsp;<strong>UseFilters</strong>&nbsp;và bộ lọc ngoại lệ của bạn. Ghi chú thích class controller với decorator&nbsp;<strong>@UseFilters</strong>&nbsp;và chuyển phiên bản của bộ lọc ngoại lệ dưới dạng đối số cho decorator:</p>

<pre id="pre5">
<code>@Controller()
@UseFilters(new HttpExceptionFilter())
export class AppController {}</code></pre>

<p>Vị trí bạn liên kết bộ lọc sẽ quyết định phạm vi xử lý lỗi. Bộ lọc liên kết với bộ điều khiển sẽ chỉ phục vụ cho bộ điều khiển mà bạn liên kết tới, bộ lọc liên kết ứng dụng sẽ dành cho toàn bộ ứng dụng.</p>

<p>Trên đây là&nbsp;<strong>cách dùng bộ lọc ngoại lệ của Nest.js để xử lý lỗi</strong>. Hi vọng bài viết hữu ích với các bạn.</p>
		</div>
				<div id="author">
						<p>
				<strong>Nguồn tin:</strong>
				Quantrimang.com
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-dung-bo-loc-ngoai-le-nest-js-de-xu-ly-loi-7658.html" title="Cách dùng bộ lọc ngoại lệ Nest.js để xử lý lỗi">https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-dung-bo-loc-ngoai-le-nest-js-de-xu-ly-loi-7658.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; .&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.
		</div>
		<div id="contact">
			<a href="mailto:admin@nguoicodonvn2008.info">admin@nguoicodonvn2008.info</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://www.nguoicodonvn2008.info/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
		</script>
		<div class="car-top">
  <span><img src="https://www.nguoicodonvn2008.info/themes/default/images/car.png" alt=""></span>
</div>
<div id="run_cronjobs" style="visibility:hidden;display:none;"><img alt="cron" src="/index.php?second=cronjobs&amp;p=b7Z9GpqG" width="1" height="1" /></div>
<script src="https://www.nguoicodonvn2008.info/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4c_e856T",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://www.nguoicodonvn2008.info/assets/js/language/vi.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/global.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/site.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/news.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/main.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/custom.js"></script>
<script type="application/ld+json">
        {
            "@context": "https://schema.org",
            "@type": "Organization",
            "url": "https://www.nguoicodonvn2008.info",
            "logo": "https://www.nguoicodonvn2008.info/uploads/angel.gif"
        }
        </script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/bootstrap.min.js"></script>
<script type="text/javascript">
var $scrolltop = $('.car-top');
$scrolltop.on('click', function () {
    $('html,body').animate({
        scrollTop: 0
    }, 800);
    $(this).addClass("car-run");
    setTimeout(function(){ $scrolltop.removeClass('car-run');}, 1000);
    return false;
});
$(window).on('scroll', function ()
{ 
    if($(window).scrollTop() >= 200)
    {
        $scrolltop.addClass("show");
        $scrolltop.addClass("car-down");
    }
    else
    {
       $scrolltop.removeClass("show");
       setTimeout(function(){ $scrolltop.removeClass('car-down');}, 300);
    }
});
</script>
</body>
</html>