@@ -67,8 +67,8 @@ <h2><a class="anchor" aria-hidden="true" id="custom-validator"></a><a href="#cus
6767< p > < strong > Note:</ strong > if your custom validator returns a promise, it must reject to indicate that the field is invalid.</ p >
6868</ blockquote >
6969< h3 > < a class ="anchor " aria-hidden ="true " id ="example-checking-if-e-mail-is-in-use "> </ a > < a href ="#example-checking-if-e-mail-is-in-use " aria-hidden ="true " class ="hash-link "> < svg class ="hash-link-icon " aria-hidden ="true " height ="16 " version ="1.1 " viewBox ="0 0 16 16 " width ="16 "> < path fill-rule ="evenodd " d ="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z "> </ path > </ svg > </ a > Example: checking if e-mail is in use</ h3 >
70- < div class ="tabs "> < div class ="nav-tabs "> < div id ="tab-group-148-tab-149 " class ="nav-link active " data-group ="group_148 " data-tab ="tab-group-148-content-149 "> JavaScript</ div > < div id ="tab-group-148-tab-150 " class ="nav-link " data-group ="group_148 " data-tab ="tab-group-148-content-150 "> TypeScript</ div > </ div > < div class ="tab-content "> < div id ="tab-group-148-content-149 " class ="tab-pane active " data-group ="group_148 " tabindex ="-1 "> < div > < span > < pre > < code class ="hljs css language-js "> < span class ="hljs-keyword "> const</ span > { body } = < span class ="hljs-built_in "> require</ span > (< span class ="hljs-string "> 'express-validator'</ span > );< br /> < br /> app.post(< br /> < span class ="hljs-string "> '/user'</ span > ,< br /> body(< span class ="hljs-string "> 'email'</ span > ).custom(< span class ="hljs-function "> < span class ="hljs-params "> value</ span > =></ span > {< br /> < span class ="hljs-keyword "> return</ span > User.findUserByEmail(value).then(< span class ="hljs-function "> < span class ="hljs-params "> user</ span > =></ span > {< br /> < span class ="hljs-keyword "> if</ span > (user) {< br /> < span class ="hljs-keyword "> return</ span > < span class ="hljs-built_in "> Promise</ span > .reject(< span class ="hljs-string "> 'E-mail already in use'</ span > );< br /> }< br /> });< br /> }),< br /> (req, res) => {< br /> < span class ="hljs-comment "> // Handle the request</ span > < br /> },< br /> );< br /> </ code > </ pre >
71- </ span > </ div > </ div > < div id ="tab-group-148-content-150 " class ="tab-pane " data-group ="group_148 " tabindex ="-1 "> < div > < span > < pre > < code class ="hljs css language-js "> < span class ="hljs-keyword "> import</ span > { body, CustomValidator } < span class ="hljs-keyword "> from</ span > < span class ="hljs-string "> 'express-validator'</ span > ;< br /> < span class ="hljs-comment "> // This allows you to reuse the validator</ span > < br /> < span class ="hljs-keyword "> const</ span > isValidUser: CustomValidator = < span class ="hljs-function "> < span class ="hljs-params "> value</ span > =></ span > {< br /> < span class ="hljs-keyword "> return</ span > User.findUserByEmail(value).then(< span class ="hljs-function "> < span class ="hljs-params "> user</ span > =></ span > {< br /> < span class ="hljs-keyword "> if</ span > (user) {< br /> < span class ="hljs-keyword "> return</ span > < span class ="hljs-built_in "> Promise</ span > .reject(< span class ="hljs-string "> 'E-mail already in use'</ span > );< br /> }< br /> });< br /> };< br /> < br /> app.post(< span class ="hljs-string "> '/user'</ span > , body(< span class ="hljs-string "> 'email'</ span > ).custom(isValidUser), (req, res) => {< br /> < span class ="hljs-comment "> // Handle the request</ span > < br /> });< br /> </ code > </ pre >
70+ < div class ="tabs "> < div class ="nav-tabs "> < div id ="tab-group-166-tab-167 " class ="nav-link active " data-group ="group_166 " data-tab ="tab-group-166-content-167 "> JavaScript</ div > < div id ="tab-group-166-tab-168 " class ="nav-link " data-group ="group_166 " data-tab ="tab-group-166-content-168 "> TypeScript</ div > </ div > < div class ="tab-content "> < div id ="tab-group-166-content-167 " class ="tab-pane active " data-group ="group_166 " tabindex ="-1 "> < div > < span > < pre > < code class ="hljs css language-js "> < span class ="hljs-keyword "> const</ span > { body } = < span class ="hljs-built_in "> require</ span > (< span class ="hljs-string "> 'express-validator'</ span > );< br /> < br /> app.post(< br /> < span class ="hljs-string "> '/user'</ span > ,< br /> body(< span class ="hljs-string "> 'email'</ span > ).custom(< span class ="hljs-function "> < span class ="hljs-params "> value</ span > =></ span > {< br /> < span class ="hljs-keyword "> return</ span > User.findUserByEmail(value).then(< span class ="hljs-function "> < span class ="hljs-params "> user</ span > =></ span > {< br /> < span class ="hljs-keyword "> if</ span > (user) {< br /> < span class ="hljs-keyword "> return</ span > < span class ="hljs-built_in "> Promise</ span > .reject(< span class ="hljs-string "> 'E-mail already in use'</ span > );< br /> }< br /> });< br /> }),< br /> (req, res) => {< br /> < span class ="hljs-comment "> // Handle the request</ span > < br /> },< br /> );< br /> </ code > </ pre >
71+ </ span > </ div > </ div > < div id ="tab-group-166-content-168 " class ="tab-pane " data-group ="group_166 " tabindex ="-1 "> < div > < span > < pre > < code class ="hljs css language-js "> < span class ="hljs-keyword "> import</ span > { body, CustomValidator } < span class ="hljs-keyword "> from</ span > < span class ="hljs-string "> 'express-validator'</ span > ;< br /> < span class ="hljs-comment "> // This allows you to reuse the validator</ span > < br /> < span class ="hljs-keyword "> const</ span > isValidUser: CustomValidator = < span class ="hljs-function "> < span class ="hljs-params "> value</ span > =></ span > {< br /> < span class ="hljs-keyword "> return</ span > User.findUserByEmail(value).then(< span class ="hljs-function "> < span class ="hljs-params "> user</ span > =></ span > {< br /> < span class ="hljs-keyword "> if</ span > (user) {< br /> < span class ="hljs-keyword "> return</ span > < span class ="hljs-built_in "> Promise</ span > .reject(< span class ="hljs-string "> 'E-mail already in use'</ span > );< br /> }< br /> });< br /> };< br /> < br /> app.post(< span class ="hljs-string "> '/user'</ span > , body(< span class ="hljs-string "> 'email'</ span > ).custom(isValidUser), (req, res) => {< br /> < span class ="hljs-comment "> // Handle the request</ span > < br /> });< br /> </ code > </ pre >
7272</ span > </ div > </ div > </ div > </ div >
7373< h3 > < a class ="anchor " aria-hidden ="true " id ="example-checking-if-password-confirmation-matches-password "> </ a > < a href ="#example-checking-if-password-confirmation-matches-password " aria-hidden ="true " class ="hash-link "> < svg class ="hash-link-icon " aria-hidden ="true " height ="16 " version ="1.1 " viewBox ="0 0 16 16 " width ="16 "> < path fill-rule ="evenodd " d ="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z "> </ path > </ svg > </ a > Example: checking if password confirmation matches password</ h3 >
7474< pre > < code class ="hljs css language-js "> < span class ="hljs-keyword "> const</ span > { body } = < span class ="hljs-built_in "> require</ span > (< span class ="hljs-string "> 'express-validator'</ span > );
@@ -95,8 +95,8 @@ <h2><a class="anchor" aria-hidden="true" id="custom-sanitizers"></a><a href="#cu
9595Just like with the validators, you specify the sanitizer function, which < em > must</ em > be synchronous at the
9696moment.</ p >
9797< h3 > < a class ="anchor " aria-hidden ="true " id ="example-converting-to-mongodbs-objectid "> </ a > < a href ="#example-converting-to-mongodbs-objectid " aria-hidden ="true " class ="hash-link "> < svg class ="hash-link-icon " aria-hidden ="true " height ="16 " version ="1.1 " viewBox ="0 0 16 16 " width ="16 "> < path fill-rule ="evenodd " d ="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z "> </ path > </ svg > </ a > Example: converting to MongoDB's ObjectID</ h3 >
98- < div class ="tabs "> < div class ="nav-tabs "> < div id ="tab-group-151-tab-152 " class ="nav-link active " data-group ="group_151 " data-tab ="tab-group-151-content-152 "> JavaScript</ div > < div id ="tab-group-151-tab-153 " class ="nav-link " data-group ="group_151 " data-tab ="tab-group-151-content-153 "> TypeScript</ div > </ div > < div class ="tab-content "> < div id ="tab-group-151-content-152 " class ="tab-pane active " data-group ="group_151 " tabindex ="-1 "> < div > < span > < pre > < code class ="hljs css language-js "> < span class ="hljs-keyword "> const</ span > { param } = < span class ="hljs-built_in "> require</ span > (< span class ="hljs-string "> 'express-validator'</ span > );< br /> < br /> app.post(< br /> < span class ="hljs-string "> '/object/:id'</ span > ,< br /> param(< span class ="hljs-string "> 'id'</ span > ).customSanitizer(< span class ="hljs-function "> < span class ="hljs-params "> value</ span > =></ span > {< br /> < span class ="hljs-keyword "> return</ span > ObjectId(value);< br /> }),< br /> (req, res) => {< br /> < span class ="hljs-comment "> // Handle the request</ span > < br /> },< br /> );< br /> </ code > </ pre >
99- </ span > </ div > </ div > < div id ="tab-group-151 -content-153 " class ="tab-pane " data-group ="group_151 " tabindex ="-1 "> < div > < span > < pre > < code class ="hljs css language-typescript "> < span class ="hljs-keyword "> import</ span > { param } < span class ="hljs-keyword "> from</ span > < span class ="hljs-string "> 'express-validator'</ span > ;< br /> < span class ="hljs-comment "> // This allows you to reuse the validator</ span > < br /> < span class ="hljs-keyword "> const</ span > toObjectId: CustomSanitizer = < span class ="hljs-function "> < span class ="hljs-params "> value</ span > =></ span > {< br /> < span class ="hljs-keyword "> return</ span > ObjectId(value);< br /> };< br /> < br /> app.post(< span class ="hljs-string "> '/object/:id'</ span > , param(< span class ="hljs-string "> 'id'</ span > ).customSanitizer(toObjectId), < span class ="hljs-function "> (< span class ="hljs-params "> req, res</ span > ) =></ span > {< br /> < span class ="hljs-comment "> // Handle the request</ span > < br /> });< br /> </ code > </ pre >
98+ < div class ="tabs "> < div class ="nav-tabs "> < div id ="tab-group-169-tab-170 " class ="nav-link active " data-group ="group_169 " data-tab ="tab-group-169-content-170 "> JavaScript</ div > < div id ="tab-group-169-tab-171 " class ="nav-link " data-group ="group_169 " data-tab ="tab-group-169-content-171 "> TypeScript</ div > </ div > < div class ="tab-content "> < div id ="tab-group-169-content-170 " class ="tab-pane active " data-group ="group_169 " tabindex ="-1 "> < div > < span > < pre > < code class ="hljs css language-js "> < span class ="hljs-keyword "> const</ span > { param } = < span class ="hljs-built_in "> require</ span > (< span class ="hljs-string "> 'express-validator'</ span > );< br /> < br /> app.post(< br /> < span class ="hljs-string "> '/object/:id'</ span > ,< br /> param(< span class ="hljs-string "> 'id'</ span > ).customSanitizer(< span class ="hljs-function "> < span class ="hljs-params "> value</ span > =></ span > {< br /> < span class ="hljs-keyword "> return</ span > ObjectId(value);< br /> }),< br /> (req, res) => {< br /> < span class ="hljs-comment "> // Handle the request</ span > < br /> },< br /> );< br /> </ code > </ pre >
99+ </ span > </ div > </ div > < div id ="tab-group-169 -content-171 " class ="tab-pane " data-group ="group_169 " tabindex ="-1 "> < div > < span > < pre > < code class ="hljs css language-typescript "> < span class ="hljs-keyword "> import</ span > { param } < span class ="hljs-keyword "> from</ span > < span class ="hljs-string "> 'express-validator'</ span > ;< br /> < span class ="hljs-comment "> // This allows you to reuse the validator</ span > < br /> < span class ="hljs-keyword "> const</ span > toObjectId: CustomSanitizer = < span class ="hljs-function "> < span class ="hljs-params "> value</ span > =></ span > {< br /> < span class ="hljs-keyword "> return</ span > ObjectId(value);< br /> };< br /> < br /> app.post(< span class ="hljs-string "> '/object/:id'</ span > , param(< span class ="hljs-string "> 'id'</ span > ).customSanitizer(toObjectId), < span class ="hljs-function "> (< span class ="hljs-params "> req, res</ span > ) =></ span > {< br /> < span class ="hljs-comment "> // Handle the request</ span > < br /> });< br /> </ code > </ pre >
100100</ span > </ div > </ div > </ div > </ div >
101101</ span > </ div > </ article > </ div > < div class ="docs-prevnext "> < a class ="docs-prev button " href ="/docs/6.10.0/sanitization.html "> < span class ="arrow-prev "> ← </ span > < span > Sanitization</ span > </ a > < a class ="docs-next button " href ="/docs/6.10.0/custom-error-messages.html "> < span > Custom Error Messages</ span > < span class ="arrow-next "> →</ span > </ a > </ div > </ div > </ div > < nav class ="onPageNav "> < ul class ="toc-headings "> < li > < a href ="#custom-validator "> Custom validator</ a > < ul class ="toc-headings "> < li > < a href ="#example-checking-if-e-mail-is-in-use "> Example: checking if e-mail is in use</ a > </ li > < li > < a href ="#example-checking-if-password-confirmation-matches-password "> Example: checking if password confirmation matches password</ a > </ li > </ ul > </ li > < li > < a href ="#custom-sanitizers "> Custom sanitizers</ a > < ul class ="toc-headings "> < li > < a href ="#example-converting-to-mongodbs-objectid "> Example: converting to MongoDB's ObjectID</ a > </ li > </ ul > </ li > </ ul > </ nav > </ div > < footer class ="nav-footer " id ="footer "> < section class ="sitemap "> < a href ="/ " class ="nav-home "> < img src ="/img/logo.svg " alt ="express-validator " width ="66 " height ="58 "/> </ a > < div > < h5 > Docs</ h5 > < a href ="/docs/index.html "> Getting Started</ a > < a href ="/docs/check-api.html "> API Reference</ a > </ div > < div > < h5 > Community</ h5 > < a href ="http://stackoverflow.com/questions/tagged/express-validator " target ="_blank " rel ="noreferrer noopener "> Stack Overflow</ a > </ div > < div > < h5 > More</ h5 > < a href ="https://github.com/express-validator/express-validator "> GitHub</ a > < a class ="github-button " href ="https://github.com/express-validator/express-validator " data-icon ="octicon-star " data-count-href ="/express-validator/express-validator/stargazers " data-show-count ="true " data-count-aria-label ="# stargazers on GitHub " aria-label ="Star this project on GitHub "> Star</ a > </ div > </ section > < section class ="copyright "> Copyright © 2021 express-validator</ section > </ footer > </ div > < script type ="text/javascript " src ="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js "> </ script > < script >
102102 document . addEventListener ( 'keyup' , function ( e ) {
0 commit comments