<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.gcalls.co/blog</id>
    <title>gBook Blog</title>
    <updated>2026-04-24T23:53:44.237Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs.gcalls.co/blog"/>
    <subtitle>gBook Blog</subtitle>
    <icon>https://docs.gcalls.co/https://app.gcalls.co/assets/img/favicon.png</icon>
    <entry>
        <title type="html"><![CDATA[How to contribute]]></title>
        <id>how-to-contribute</id>
        <link href="https://docs.gcalls.co/blog/how-to-contribute"/>
        <updated>2026-04-24T23:53:44.237Z</updated>
        <summary type="html"><![CDATA[1. Prerequisites:]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-prerequisites">1. Prerequisites:<a class="hash-link" href="#1-prerequisites" title="Direct link to heading">​</a></h2><ul><li>Browser (e.g: Google Chrome)</li><li>Access to <a href="https://gitlab.com/gcalls-opensource/gcalls-doc" target="_blank" rel="noopener noreferrer">Gcalls-docs repository</a> </li><li>Visual Studio Code</li><li>git</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-admin-page">2. Admin page:<a class="hash-link" href="#2-admin-page" title="Direct link to heading">​</a></h2><ul><li><strong>(*) Note</strong>: Admin page will only commit to 1 branch: <code>preview</code> branch. It's not recommended to edit 1 document using both Admin page and Programmer's approach</li><li>Go to docs.gcalls.co/admin (editor page powered by NetlifyCMS)</li><li>Login with your GitLab account (the one has access to the repository)
<img loading="lazy" alt="how-to-document-thumb1" src="data:image/png;base64,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LxZLMAwDsixjvfDUzM9pj2qbdlHWa5V3IluzpY2NEJ33AUQ0P4TqLePHr5ukH7v/9draijW5UMBFi232RdlJGOw0StM6qFYb6HS76HZ6Y9vq6ORXRJMI33K3zdqCL1fqQ+UZ95J50yQS6sSSDIOdvOiGgXKlhkaj5dkICVs/c7pYlybcgdkD3ur/a/T7BOen36EvGo2g6dPSZ7DTcfjNiULk51KFOzAI+CAMw8R2f/iyPblYEH5lGQY7HcfqSo5dH2lml6LmPkqWZajxWKD6u71SejqdtEavTplczD4rGC3LMNhpmlg0ilw27Ww79kAilmPoOIQfxOTHMIzAF1hlWcJHbl+DLMvQtM7EycXs0YPugScMdiI6b5euLGObpf5uGCa2tqxpBOzJxfyMDtlmsBPRRbi04Q7MFvDuVZomDYxKJAYXvRjsRHRRLnW4A7MFvLW6i3WhdGPjiufoVVmxPlIGOxFdpEsf7kDwgLfnfgesxTe8LnTZ3dUY7ER0kRjufUED3p77HbAmF3MvqzfLQCciorN0aXvLTBKkJ417emB73vaNp9eOPR85EdFpYrj7CBLw7qXHmi2NIwiJaG6wLOMjSJnGPT0wg52I5gnDfYIgAd+oH57jKyIiCobhPsWkgM9l01hbW7mAV0VENBnDPQCvgGc/diKaZwz3gNwBz2AnonnH3jJERAJiy52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiATHciYgExHAnIhIQw52ISEAMdyIiAUUu+gXQ+TBN86JfAp0jSZIu+iXQBWO4C4hBTl7bAAP/cmG4C2JSoDPsL6fRMHdvBwx68THc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" width="375" height="260" class="img_ev3q"></li><li><strong>(*) Note</strong>: First time login requires you to grant a GitLab App permission to commit and push on this repository.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="21-create-or-edit-a-document">2.1 Create or edit a document:<a class="hash-link" href="#21-create-or-edit-a-document" title="Direct link to heading">​</a></h3><p><img loading="lazy" alt="how-to-document-thumb2" src="/assets/images/how-to-document-thumb2-e0a8d0abeeb30746c2e50e0ae1c89f87.png" width="1023" height="562" class="img_ev3q"></p><ul><li>Click on a collection you'd like to add or edit a doc</li><li>Click New to add a new doc or click on a doc to edit it.</li><li>Fill out your doc using the admin page or alternatively, use third-party online markdown editor (e.g: <a href="https://stackedit.io/app#" target="_blank" rel="noopener noreferrer">https://stackedit.io/app#</a>)</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="22-add-metadata">2.2 Add metadata:<a class="hash-link" href="#22-add-metadata" title="Direct link to heading">​</a></h3><p>Note: NetlifyCMS can only offer to create documents, not folders.</p><ul><li><p>Image: Click the plus sign (<code>+</code>) on the top right of menu bar and chose Image to open the Image board.
<img loading="lazy" alt="how-to-document-thumb3" src="/assets/images/how-to-document-thumb3-7e9edf00756383b95ace4105dc7e9019.png" width="1857" height="1175" class="img_ev3q">
From there, you can either pick an image on the system or upload a new one.
<img loading="lazy" alt="how-to-document-thumb4" src="/assets/images/how-to-document-thumb4-b7781244cfd582fad84116a34abd36a5.png" width="1682" height="1033" class="img_ev3q"></p></li><li><p>Slugs: index name of your doc (e.g: if you name slug <code>"example"</code>, your doc would be available to be accessed at <a href="https://docs.gcalls.co/your-folder/example" target="_blank" rel="noopener noreferrer">https://docs.gcalls.co/your-folder/example</a>)</p></li><li><p>Tags: tags for your docs. Each separated by a comma ("<code>,</code>"). The more tags you add, the more likely your document get discovered.</p></li><li><p>(Optional) Author's name, profile picture, title, ... are optional, though encouraged to be used for blogs. Anything other than blogs won't display author's information
<img loading="lazy" alt="how-to-document-thumb5" src="/assets/images/how-to-document-thumb5-ba2b37192cbeaee325ffc5fca81727e0.png" width="845" height="796" class="img_ev3q"></p></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="23-publish-your-doc">2.3 Publish your doc<a class="hash-link" href="#23-publish-your-doc" title="Direct link to heading">​</a></h3><ul><li>When you're ready, publish the doc
<img loading="lazy" alt="how-to-document-thumb6" src="data:image/png;base64,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" width="538" height="83" class="img_ev3q"></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="24-other-tips-and-tricks">2.4 Other tips and tricks:<a class="hash-link" href="#24-other-tips-and-tricks" title="Direct link to heading">​</a></h3><ul><li>You can directly edit a document on the client UI by clicking <code>Edit this page</code> (Not recommended for end-user who has no experience with markdown)
<img loading="lazy" alt="how-to-document-thumb7" src="data:image/png;base64,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ZcAoUZwAX/AI/ZNJrLIDZu1FhNl5PDs5RKprmP3xkwx7k1gTjbQ+toc25iyFlkbof30PI53HSLtPk7aKTLKDpmaDbP9hUlozFRERWbZNm7x1dYXXfsatOcjBg8Hrvlnlne4TpEsVrOiTdBYPEe3aTcfBEA1UmZq0yVpZJhaYRnLSh4kOu4iF9tHjg6mJAolk7Tmype23fIZh4mrdQ3DvjpkylsgMPkcsufCU3lTJxvA9RWR/I0wWsYafIxqbeavWGSfeHcU43E0gEmd/A1SnJikXsxTtmfStcoZoRw/Oy70EQr08ZjgUczZl5n5scZl05Ek6yoeIBPcQfriRhuoUE6UxivrLXiIiIivypXvuafr1RhdiPpFIL5FI7zXfW+ul0tuCsYfh/CCtyf34o6u8lNlyiMyZp5jo/X06kxv+jq6IiMgtadPOvF1PidsmY+6iOxagsVhkouJgNHl5LLiH5skzxJf6koSIiIgs26ZN3izLor+/9u9KpbJ6f/JKVofporl5F/7APnY0NlCdmqCUPUF37GWUu4mIiKydTbtsKiIiIiJfVLd/mF5ERETkdqTkTURERKSOKHkTERERqSNK3kRERETqiJI3ERERkTqi5E1ERESkjih5ExEREakjSt5ERERE6oiSNxEREZE6ouRNREREpI4oeRMRERGpI0reREREROqIkjcRERGROqLkTURERKSOKHkTERERqSNK3kRERETqiJI3ERERkTqi5E1ERESkjih5ExEREakjSt5ERERE6oiSNxEREZE6ouRNREREpI4oeRMRERGpI0reREREROqIkjcRERGROqLkTURERKSOKHkTERERqSNK3kRERETqiJI3ERERkTqi5E1ERESkjih5ExEREakjSt5ERERE6oiSNxEREZE68v8BMBZ1DcsAwnEAAAAASUVORK5CYII=" width="623" height="128" class="img_ev3q"></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-programmers-approach">3. Programmer's approach:<a class="hash-link" href="#3-programmers-approach" title="Direct link to heading">​</a></h2><p>This process can be achieved with just the operating system's default terminal. However, this guide will show you a more inclusive approach (for both tech and non-tech personnels).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="31-one-time-setup">3.1 One time setup:<a class="hash-link" href="#31-one-time-setup" title="Direct link to heading">​</a></h3><ul><li><p>Create a folder to store the source code.</p></li><li><p>Open Visual Studio Code, click <code>File</code> &gt; <code>Open folder</code>, select the folder you've just created.</p></li><li><p>Click <code>Terminal</code> &gt; <code>New Terminal</code> on the top menu bar. A new terminal will appear on the bottom of the window:
<img loading="lazy" alt="how-to-document-thumb12" src="/assets/images/how-to-document-thumb12-6575b17d04de70db876d5d9b23c3421d.png" width="1856" height="1144" class="img_ev3q"></p></li><li><p>Type in the terminal:</p><ul><li>Initialize git:<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git init</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li>Establish connection to Gcalls-Doc source code:<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git remote add origin https://gitlab.com/gcalls-opensource/gcalls-doc</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="32-frequent-setup-everytime-you-want-to-start-a-something-new">3.2 Frequent Setup (Everytime, you want to start a something new)<a class="hash-link" href="#32-frequent-setup-everytime-you-want-to-start-a-something-new" title="Direct link to heading">​</a></h3><ul><li>Type in the terminal:<ul><li>Get the latest update of the source code:<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git fetch</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li>Check the curernt branch, it should return <code>master</code>:<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git branch</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li>Download the latest update of the current branch (i.e: <code>master</code>):<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git pull</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li>Create a new branch of your own:<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git checkout -b &lt;branch_name&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li>At this point, you can start creating/editing/deleting documents.</li></ul></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="33-editing">3.3 Editing:<a class="hash-link" href="#33-editing" title="Direct link to heading">​</a></h3><ul><li>On the left side menu, select the document icon on top:
<img loading="lazy" alt="how-to-document-thumb13" src="data:image/png;base64,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" width="37" height="365" class="img_ev3q"></li><li>It'll show a directory tree like this:
<img loading="lazy" alt="how-to-document-thumb14" src="/assets/images/how-to-document-thumb14-3944c78e45c8ab7bf712e14024079070.png" width="270" height="430" class="img_ev3q">.</li><li>From there, you can:<ul><li>Click on a folder to open it, click on documents to open them.</li><li>Right click on a document &gt; <code>Rename...</code> to rename or Right click on a document &gt;  <code>Delete</code> to delete it.</li><li>Right click on a folder &gt; <code>Rename...</code> to rename or Right click on a folder &gt;  <code>Delete</code> to delete it.</li><li>Right click on a folder &gt; <code>New file...</code> to create a new file. Name it with extension <code>.md</code> (e.g: <code>my-document.md</code>)</li></ul></li><li>Document's metadata:<ul><li>Metadata is used to identify document's core value.</li><li>Add the following configuration to the top of your document:</li></ul></li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">---</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">title: &lt;title of your document&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">slug: &lt;index-name-of-your-document&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tags:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - &lt;tag, keyword for the document&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - &lt;tag, keyword for the document&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - &lt;tag, keyword for the document&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">authors:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - name: &lt;Author's name&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    url: &lt;Author's GitLab profile page&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    image_url: &lt;Any&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    title: &lt;Job title&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">---</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li><strong>(*) Note</strong>: Slugs: index name of your doc (i.e: if you name slug "example", your doc would be available to be accessed at <a href="https://docs.gcalls.co/your-folder/example" target="_blank" rel="noopener noreferrer">https://docs.gcalls.co/your-folder/example</a>)
Tags: tags for your docs. The more tags you add, the more likely your document get discovered.</li><li>For example:</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">---</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">title: How to contribute</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">slug: how-to-contribute</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tags:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - documentation</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - document</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - contribute</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - tutorial</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - guide</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - README</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - GettingStarted</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - Docusaurus</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - NetlifyCMS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - ReactJS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">authors:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - name: Huỳnh Minh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    url: https://gitlab.com/huynhminh.le</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    image_url: https://secure.gravatar.com/avatar/27c9cd7cb2e2645b12ae4281b9fb1231?s=192&amp;d=identicon</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    title: Customer Success Engineer</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">---</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" alt="how-to-document-thumb15" src="/assets/images/how-to-document-thumb15-9414b03645439a0b255ded1ab63988ee.png" width="1850" height="1109" class="img_ev3q">
<img loading="lazy" alt="how-to-document-thumb16" src="/assets/images/how-to-document-thumb16-3c5b5d75a294e7036f9e587849b83993.png" width="799" height="173" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="34-create-a-new-folder">3.4 Create a new folder:<a class="hash-link" href="#34-create-a-new-folder" title="Direct link to heading">​</a></h3><ul><li>To create or edit a folder, simply create a folder in root <code>/</code> of project. Add  at least 1 document to that folder (e.g: <code>intro.md</code>).</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="a-configure-a-folder-for-client-page">a. Configure a folder for client page:<a class="hash-link" href="#a-configure-a-folder-for-client-page" title="Direct link to heading">​</a></h4><ul><li>A folder can only be used as a collection when it's properly configured in <code>docusaurus.config.js</code>. </li><li>By default, Docusaurus has only 2 folders: <code>blogs</code> and <code>docs</code> (display name is Tutorial). With <code>blogs</code> being blog by type, <code>docs</code> being docs by type. The big difference between type blog and type doc is that blog displays author's information while doc doesn't.</li><li>This project uses a plugin called <code>@docusaurus/plugin-content-docs</code>, which enables user to add more folders/collections under the type of doc. Docusaurus also has another plugin called <code>@docusaurus/plugin-content-blogs</code> for type blog.</li></ul><h5 class="anchor anchorWithStickyNavbar_LWe7" id="a1-add-configuration-for-docusaurusconfigjs">a1. Add configuration for docusaurus.config.js<a class="hash-link" href="#a1-add-configuration-for-docusaurusconfigjs" title="Direct link to heading">​</a></h5><ul><li>In <code>docusaurus.config.js</code>, you can find this configuration:</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">plugins: [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      '@docusaurus/plugin-content-docs',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        id: 'tech',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        path: 'tech',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        routeBasePath: 'tech',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        sidebarPath: require.resolve('./sidebars.js'),</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      }, </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      '@docusaurus/plugin-content-docs',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        id: 'sale',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        path: 'sale',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        routeBasePath: 'sale',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        sidebarPath: require.resolve('./sidebars.js'),</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      }, </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ],</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>This configuration was configured to add 2 additional folders (tech and sales). To add more folder, add another item as seen in this configuration and replace <code>id</code>, <code>path</code>, <code>routeBasePath</code> with the name of the folder (no CAP).</li><li>Then scroll down and you'll see this configuration:</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">themeConfig:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    /** @type {import('@docusaurus/preset-classic').ThemeConfig} */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ({</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      navbar: {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        title: 'Gcalls',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        logo: {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          alt: 'Gcalls Logo',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          src: 'https://app.gcalls.co/assets/img/favicon.png',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        items: [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            type: 'doc',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            docId: 'intro',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            position: 'left',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            label: 'Tutorial',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {to: '/blog', label: 'Blog', position: 'left', activeBaseRegex: `/docs/`,},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {to: '/tech/intro', label: 'Tech', position: 'left', activeBaseRegex: `/docs/`,},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {to: '/sale/intro', label: 'Sale', position: 'left', activeBaseRegex: `/docs/`,},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            href: 'https://gitlab.com/gcalls-opensource/gcalls-doc',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            label: 'GitLab',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            position: 'right',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            type: 'custom-myDocSearch', </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            position: "left",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            itemProp: 44, </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            anotherProp: "xyz"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            type: 'search',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            position: 'right',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      footer: {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        style: 'dark',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        links: [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            title: 'Docs',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            items: [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                label: 'Tutorial',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                to: '/docs/handbook-structure-and-style-guide',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            title: 'Community',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            items: [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                label: 'Stack Overflow',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                href: 'https://stackoverflow.com/questions/tagged/docusaurus',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                label: 'Discord',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                href: 'https://discordapp.com/invite/docusaurus',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                label: 'Twitter',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                href: 'https://twitter.com/docusaurus',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            title: 'More',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            items: [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                label: 'Blog',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                to: '/blog',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                label: 'GitHub',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                href: 'https://github.com/facebook/docusaurus',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      prism: {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        theme: lightCodeTheme,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        darkTheme: darkCodeTheme,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }),</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Add this line to the configuration above to add link to navigation bar and footer.</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">{to: '/&lt;folder_name&gt;/&lt;document_index_name&gt;', label: '&lt;Folder Name&gt;', position: 'left', activeBaseRegex: `/docs/`,},</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>If the folder is empty, add 1 document with its attribute <code>slug</code></li><li><strong>(*) Note</strong>: <code>&lt;document_index_name&gt;</code> is the index name aka <code>slug</code> of the first document in this folder. With type <code>docs</code>, The Url must link to an existing fixed document. If this document is deleted, the url wouldn't work properly and it must be replaced by an existing document's index name.</li></ul><h5 class="anchor anchorWithStickyNavbar_LWe7" id="a2-configure-a-nested-folder-for-client-page">a2. Configure a nested folder for client page:<a class="hash-link" href="#a2-configure-a-nested-folder-for-client-page" title="Direct link to heading">​</a></h5><ul><li>To add a folder within a folder, simply create another folder inside a folder in root <code>/</code> of the project (e.g: docs, blogs, tech, sale, ...)</li><li>Add a json file (e.g: <code>_category_.json</code>) to the folder that contains the nested folder. The content includes:</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "label": "Docusaurus Tutorial",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "position": 2,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "link": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "type": "generated-index",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "description": "5 minutes to learn the most important Docusaurus concepts."</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Parameters:<ul><li><code>label</code>: Display name of the current directory/folder, the doc resides in.</li><li><code>position</code>: position of the current directory.</li><li><code>link.type</code>: type of link</li><li><code>link.description</code>: description of current directory</li></ul></li><li>You can add another <code>_category_.json</code> file to the nested folder to configure its display name, index, etc, ...</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="b-configure-a-folder-for-admin-page">b. Configure a folder for admin page:<a class="hash-link" href="#b-configure-a-folder-for-admin-page" title="Direct link to heading">​</a></h4><ul><li>The admin page is powered by NetlifyCMS or Netlify Content Management System.</li><li>In order for the admin page to edit a document, it needs to access the document's folder/directory/collection.</li><li>Open <code>static/admin/config.yml</code> and add your folder configuration:</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">- name: sale</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  label: "sale"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  folder: sale</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  identifier_field: title</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  extension: md</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  widget: "list"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  create: true</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  slug: "{{year}}-{{month}}-{{day}}-{{slug}}" # Filename template, e.g., YYYY-MM-DD-title.md</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fields:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - { name: title, label: Title, widget: string }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - { name: body, label: Body, widget: markdown }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - { name: slug, label: Slug, widget: string }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - label: "Tags"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      name: "tags"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      widget: "list"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - label: "Authors"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      name: "authors" </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      widget: "list"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      fields:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - { name: name, label: Name, widget: string }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - { name: title, label: Title, widget: string } </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - { name: url, label: URL, widget: string } </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - { name: imageUrl, label: ImageURL, widget: string } </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>The configuration above adds a collection named <code>sale</code> which is also the <code>sale</code> folder in root <code>/</code> of this project.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="35-images">3.5 Images:<a class="hash-link" href="#35-images" title="Direct link to heading">​</a></h3><ul><li>Images can be placed anywhere in the designated folders in root / (except src,node_modules,build, and .docusaurus). Though it's recommended to put images in a folder which isn't displayed on navigation bar (e.g: <code>static/img/</code>).</li><li>To add image to <code>static/img</code>, simple move an image into that folder.</li><li>Images uploaded via admin page will be in <code>static/img/</code>.</li><li>Images can be referenced by relative path.</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">![image description](&lt;relative_path_to_image&gt;)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>For example: <code>![how-to-document-thumb15](../static/img/tech/how-to-document/how-to-document-thumb15.png)</code>
will display an image called <code>how-to-document-thumb15.png</code> with alternative title "how-to-document-thumb15"</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="36-publishing">3.6 Publishing:<a class="hash-link" href="#36-publishing" title="Direct link to heading">​</a></h3><ul><li>When you're done with the documentation process, add your changes to git:<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git add &lt;path to document&gt; &lt;path to document2&gt; &lt;path to document3&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>Tip: You can also right click on your document &gt; <code>Copy Path</code> to get its path</li><li>Commit your changes and add a message for your commit:<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git commit -m "&lt;your message&gt;"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li>Push your changes to the source code to generate a temporary preview page of docs.gcalls.co. If this is your first time pushing on a new branch:<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git push -u origin &lt;your_branch_name&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>else:<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git push -u origin</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-view-the-publishing-process-on-gitlab">4. View the publishing process (on GitLab):<a class="hash-link" href="#4-view-the-publishing-process-on-gitlab" title="Direct link to heading">​</a></h2><ul><li>Go back to <a href="https://gitlab.com/gcalls-opensource/gcalls-doc" target="_blank" rel="noopener noreferrer">Gcalls-docs repository</a><img loading="lazy" alt="how-to-document-thumb8" src="data:image/png;base64,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" width="766" height="83" class="img_ev3q"></li><li>On the left side menu bar, click on CI/CD &gt; Pipelines. You can see a list of available jobs triggered by Cloudflare Pages. On the top row, click on the running/passed button to view the latest job.
<img loading="lazy" alt="how-to-document-thumb9" src="/assets/images/how-to-document-thumb9-f6342567c776ba946a7b2f52852535f3.png" width="1855" height="1070" class="img_ev3q"></li><li>Click Cloudflare Pages when it turns green to view the preview version of <a href="https://docs.gcalls.co" target="_blank" rel="noopener noreferrer">docs.gcalls.co</a> with your changes.
<img loading="lazy" alt="how-to-document-thumb10" src="/assets/images/how-to-document-thumb10-32d582ce315650cab9757c0d8999b561.png" width="950" height="721" class="img_ev3q"></li><li>It will open a preview link with your changes
<img loading="lazy" alt="how-to-document-thumb11" src="/assets/images/how-to-document-thumb11-ebeecfc5f39ec1c6d1560f14f21b7b08.png" width="1585" height="1104" class="img_ev3q"></li></ul>]]></content>
        <author>
            <name>Huỳnh Minh</name>
            <uri>https://gitlab.com/huynhminh.le</uri>
        </author>
        <category label="documentation" term="documentation"/>
        <category label="document" term="document"/>
        <category label="contribute" term="contribute"/>
        <category label="tutorial" term="tutorial"/>
        <category label="guide" term="guide"/>
        <category label="README" term="README"/>
        <category label="GettingStarted" term="GettingStarted"/>
        <category label="Docusaurus" term="Docusaurus"/>
        <category label="NetlifyCMS" term="NetlifyCMS"/>
        <category label="ReactJS" term="ReactJS"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tài liệu tham khảo sentry với express]]></title>
        <id>reference-sentry-with-express</id>
        <link href="https://docs.gcalls.co/blog/reference-sentry-with-express"/>
        <updated>2023-04-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Thêm @sentry/node vào package.json:]]></summary>
        <content type="html"><![CDATA[<p>Thêm <code>@sentry/node</code>&nbsp;vào package.json:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save @sentry/node</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Sentry nên được khởi tạo càng sớm trong ứng dụng của bạn càng tốt:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">express</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"express"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports operator" style="color:#393A34">*</span><span class="token imports"> </span><span class="token imports keyword module" style="color:#00009f">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">Sentry</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@sentry/node"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// or using CommonJS</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// const express = require('express');</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// const Sentry = require('@sentry/node');</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> app </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">express</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">init</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">dsn</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://examplePublicKey@o0.ingest.sentry.io/0"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// The request handler must be the first middleware on the app</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">requestHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// All controllers should live here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"/"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">rootHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">req</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> res</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">end</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Hello world!"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// The error handler must be before any other error middleware and after all controllers</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">errorHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Optional fallthrough error handler</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">onError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">err</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> req</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> res</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> next</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// The error id is attached to `res.sentry` to be returned</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// and optionally displayed to the user for support.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">statusCode</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">500</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">end</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">sentry</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"\n"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">listen</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Cách để kiểm thử sentry với một api và trả về lỗi  :</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"/debug-sentry"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">mainHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">req</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> res</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">throw</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"My first Sentry error!"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><code>requestHandler</code>&nbsp;Tùy biến một số tùy chọn cho phép bạn quyết định dữ liệu nào sẽ được đưa vào sự kiện được gửi tới Sentry.</p><p>Các tùy chọn có thể là:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// keys to be extracted from req</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">request</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> boolean </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> string</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// default: true = ['cookies', 'data', 'headers', 'method', 'query_string', 'url']</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// server name</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">serverName</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> boolean</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// default: true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// generate transaction name</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">//   path == request.path (eg. "/foo")</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">//   methodPath == request.method + request.path (eg. "GET|/foo")</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">//   handler == function name (eg. "fooHandler")</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">transaction</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> boolean </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'path'</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'methodPath'</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'handler'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// default: true = 'methodPath'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// keys to be extracted from req.user</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">user</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> boolean </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> string</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// default: true = ['id', 'username', 'email']</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// client ip address</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ip</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> boolean</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// default: false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// node version</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">version</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> boolean</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// default: true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// timeout for fatal route errors to be delivered</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">flushTimeout</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> number</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// default: undefined</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Ví dụ: nếu bạn muốn bỏ qua tên máy chủ và chỉ thêm người dùng, bạn sẽ sử dụng&nbsp;<code>requestHandler</code>&nbsp;như sau:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">requestHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">serverName</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">user</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"email"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Mặc định thì&nbsp;<code>errorHandler</code>&nbsp;sẽ chỉ nắm bắt các lỗi với mã trạng thái là&nbsp;<code>500</code>&nbsp;hoặc cao hơn. Nếu bạn muốn thay đổi nó, hãy cung cấp cho nó&nbsp;<code>shouldHandleError</code>&nbsp;, chấp nhận <code>error</code> làm đối số của nó và quyết định xem có nên gửi lỗi hay không bằng cách trả về một giá trị boolean thích hợp.</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">errorHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">shouldHandleError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Capture all 404 and 500 errors</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">status</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">404</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">||</span><span class="token plain"> error</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">status</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">500</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Nếu bạn sử dụng TypeScript, bạn cần truyền trình xử lý của chúng tôi để thể hiện các loại cụ thể. Chúng hoàn toàn tương thích, vì vậy điều duy nhất bạn cần thay đổi là:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// from</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> express </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'express'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// to</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports operator" style="color:#393A34">*</span><span class="token imports"> </span><span class="token imports keyword module" style="color:#00009f">as</span><span class="token imports"> express</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'express'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// from</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">requestHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// to</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">requestHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">as</span><span class="token plain"> express</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">RequestHandler</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// from</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">errorHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// to</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">errorHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">as</span><span class="token plain"> express</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">ErrorRequestHandler</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="monitor-performance">Monitor Performance<a class="hash-link" href="#monitor-performance" title="Direct link to heading">​</a></h2><p>Có thể thêm theo dõi quá trình ghi nhật ký các sự kiện diễn ra trong một yêu cầu, thường là trên nhiều dịch vụ cho tất cả các khuôn khổ phổ biến. Tuy nhiên, chúng tôi chỉ cung cấp các trình xử lý mặc định cho Express.</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">Sentry</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"@sentry/node"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> express </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"express"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> app </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">express</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">init</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">dsn</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://examplePublicKey@o0.ingest.sentry.io/0"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">integrations</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// enable HTTP calls tracing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Sentry</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Integrations</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Http</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">tracing</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// enable Express.js middleware tracing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Sentry</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Integrations</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Express</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// to trace all requests to the default router</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      app</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// alternatively, you can specify the routes you want to trace:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// router: someRouter,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// We recommend adjusting this value in production, or using tracesSampler</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// for finer control</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">tracesSampleRate</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1.0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// RequestHandler creates a separate execution context using domains, so that every</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// transaction/span/breadcrumb is attached to its own Hub instance</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">requestHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// TracingHandler creates a trace for every incoming request</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">tracingHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// the rest of your app</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Handlers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">errorHandler</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">listen</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Các bước được cung cấp cho các hoạt động sau trong một sentry:</p><ul><li>Yêu cầu HTTP được thực hiện với&nbsp;<code>request</code></li><li><code>get</code>&nbsp;cuộc gọi sử dụng <code>http</code> và <code>https</code></li><li>Middleware (Express.js only)</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="troubleshooting">Troubleshooting<a class="hash-link" href="#troubleshooting" title="Direct link to heading">​</a></h3><p>Khi chụp lỗi cục bộ, hãy đảm bảo rằng bộ lọc dữ liệu của dự án để lọc các sự kiện máy chủ cục bộ đã được tắt:</p><p><a href="https://docs.sentry.io/static/091fb454a0230ae99f004f5d78972ea2/f3015/express-data-filters.png" target="_blank" rel="noopener noreferrer"><img loading="lazy" src="https://docs.sentry.io/static/091fb454a0230ae99f004f5d78972ea2/c1b63/express-data-filters.png" alt="express data filters" title="express data filters" class="img_ev3q"></a></p><p>Điều này đảm bảo rằng các lỗi do trình duyệt của bạn tạo ra (chẳng hạn như lỗi do các phương thức HTTP tạo ra) được ghi lại đúng cách.</p>]]></content>
        <author>
            <name>Huỳnh Thanh Nhàn</name>
            <uri>https://gitlab.com/NhanThanhHuynh</uri>
        </author>
        <category label="sentry" term="sentry"/>
        <category label="express" term="express"/>
        <category label="reference" term="reference"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tài liệu tham khảo sentry với react]]></title>
        <id>reference-for-sentry-react</id>
        <link href="https://docs.gcalls.co/blog/reference-for-sentry-react"/>
        <updated>2023-04-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I.Cài đặt]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="icài-đặt">I.Cài đặt<a class="hash-link" href="#icài-đặt" title="Direct link to heading">​</a></h2><p>Sentry thu thập dữ liệu bằng cách sử dụng SDK trong thời gian chạy ứng dụng của bạn.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Using npm</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --save @sentry/react</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Using yarn</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">yarn</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">add</span><span class="token plain"> @sentry/react</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="iicấu-hình">II.Cấu hình<a class="hash-link" href="#iicấu-hình" title="Direct link to heading">​</a></h2><p>Cấu hình càng sớm càng tốt trong ứng dụng của bạn :</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createRoot </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"react-dom/client"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"react"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports operator" style="color:#393A34">*</span><span class="token imports"> </span><span class="token imports keyword module" style="color:#00009f">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">Sentry</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@sentry/react"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">App</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"./App"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token maybe-class-name">Sentry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">init</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">dsn</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://examplePublicKey@o0.ingest.sentry.io/0"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">integrations</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Sentry</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">BrowserTracing</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// We recommend adjusting this value in production, or using tracesSampler</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// for finer control</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">tracesSampleRate</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1.0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> container </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token dom variable" style="color:#36acaa">document</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getElementById</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">“app”</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> root </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createRoot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">container</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">root</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Khi điều này được thực hiện, tất cả các ngoại lệ chưa được xử lý sẽ được Sentry tự động ghi lại.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="iiithêm-lỗi">III.Thêm lỗi<a class="hash-link" href="#iiithêm-lỗi" title="Direct link to heading">​</a></h3><p>Nếu đang sử dụng React 16 trở lên, bạn có thể sử dụng thành phần <code>error boundary</code> để tự động gửi lỗi Javascript từ bên trong cây thành phần tới Sentry và đặt giao diện người dùng dự phòng.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ivcài-đặt-react-router">IV.Cài đặt React Router<a class="hash-link" href="#ivcài-đặt-react-router" title="Direct link to heading">​</a></h3><p>Tích hợp React Router được thiết kế để hoạt động với tính năng theo dõi của chúng tôi. Quá trình ghi nhật ký các sự kiện diễn ra trong một yêu cầu, thường xuyên trên nhiều gói dịch vụ.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="vxác-thực">V.Xác thực<a class="hash-link" href="#vxác-thực" title="Direct link to heading">​</a></h2><p>Đoạn mã này bao gồm một lỗi cố ý, vì vậy bạn có thể kiểm tra xem mọi thứ có hoạt động ngay khi bạn thiết lập không:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">button onClick</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">methodDoesNotExist</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Break</span><span class="token plain"> the world</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">button</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Để xem và giải quyết lỗi đã ghi, hãy đăng nhập và mở dự án của bạn. Nhấp vào tiêu đề của lỗi sẽ mở ra một trang nơi bạn có thể xem thông tin chi tiết và đánh dấu nó là đã giải quyết.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="vi-ngăn-chứa-lỗi">VI. Ngăn chứa lỗi<a class="hash-link" href="#vi-ngăn-chứa-lỗi" title="Direct link to heading">​</a></h2><p>Tùy thuộc vào cách bạn đã thiết lập dự án JavaScript của mình, dấu vết ngăn xếp trong các lỗi Sentry của bạn có thể không giống mã thực của bạn.</p>]]></content>
        <author>
            <name>Huỳnh Thanh Nhàn</name>
            <uri>https://gitlab.com/NhanThanhHuynh</uri>
        </author>
        <category label="reference" term="reference"/>
        <category label="sentry" term="sentry"/>
        <category label="react" term="react"/>
        <category label="github" term="github"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tutorial Intro]]></title>
        <id>intro</id>
        <link href="https://docs.gcalls.co/blog/intro"/>
        <updated>2023-01-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Let's discover Docusaurus in less than 5 minutes.]]></summary>
        <content type="html"><![CDATA[<p>Let's discover <strong>Docusaurus in less than 5 minutes</strong>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting Started<a class="hash-link" href="#getting-started" title="Direct link to heading">​</a></h2><p>Get started by <strong>creating a new site</strong>.</p><p>Or <strong>try Docusaurus immediately</strong> with <strong><a href="https://docusaurus.new" target="_blank" rel="noopener noreferrer">docusaurus.new</a></strong>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-youll-need">What you'll need<a class="hash-link" href="#what-youll-need" title="Direct link to heading">​</a></h3><ul><li><a href="https://nodejs.org/en/download/" target="_blank" rel="noopener noreferrer">Node.js</a> version 16.14 or above:<ul><li>When installing Node.js, you are recommended to check all checkboxes related to dependencies.</li></ul></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="generate-a-new-site">Generate a new site<a class="hash-link" href="#generate-a-new-site" title="Direct link to heading">​</a></h2><p>Generate a new Docusaurus site using the <strong>classic template</strong>.</p><p>The classic template will automatically be added to your project after you run the command:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> init docusaurus@latest my-website classic</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor.</p><p>The command also installs all necessary dependencies you need to run Docusaurus.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="start-your-site">Start your site<a class="hash-link" href="#start-your-site" title="Direct link to heading">​</a></h2><p>Run the development server:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token builtin class-name">cd</span><span class="token plain"> my-website</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run start</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The <code>cd</code> command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there.</p><p>The <code>npm run start</code> command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/.</p><p>Open <code>docs/intro.md</code> (this page) and edit some lines: the site <strong>reloads automatically</strong> and displays your changes.</p>]]></content>
        <author>
            <name>Docusaurus</name>
            <uri>https://docusaurus.io/</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Test First Blog Post - phucpt-test-2]]></title>
        <id>first-blog-post</id>
        <link href="https://docs.gcalls.co/blog/first-blog-post"/>
        <updated>2022-01-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[\#﻿ Delanda Est]]></summary>
        <content type="html"><![CDATA[<p>#<!-- -->﻿ Delanda Est</p><p>#<!-- -->﻿# Lipsym orem:</p><ol><li>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. </li></ol><p>2﻿. Semper Fidelis</p><p>#<!-- -->﻿# Consectetur egsigasum:</p><p>1﻿. hallaluyuh
2﻿. amen
3﻿. illuminati</p><ol><li>Veni, vidi, vici</li></ol>]]></content>
        <author>
            <name>Huỳnh Minh</name>
            <uri>https://gitlab.com/huynhminh.le</uri>
        </author>
        <category label="foo" term="foo"/>
        <category label="bar" term="bar"/>
    </entry>
</feed>