首页
学习
活动
专区
圈层
工具
发布

处理 JavaScript 中的非预期数据

如何以更好的方式让“非预期”数据造成的副作用最小化呢?作为一个 后端开发者,我想给出一些个人化的意见。 I. 一切的源点 数据有多种来源,最主要的当然就是 用户输入。...valid) return res.status(422).json(ajv.errors) // ... }) app.listen(3000) 可见我们对一个路由中请求的 body 做了校验...许多人对待像这样 body 或者 query 错误的请求,使用了表示整体错误的 400 Bad Request 报错;在这种情况中,请求本身并没有错,只是用户发送的数据不符合预期而已。...422 一样,对于分页查询,重要的是返回恰当的状态码,无论何时对于一个只在返回值中包含了部分数据的请求,都应该返回 HTTP 206 Partial Content,也就是 “不完整的内容”;当用户到达最后一页且再没有更多数据时...res.status(400).json(e.message) } } 只要检查错误实例的名称,就能得知返回了什么类型的错误了。

1.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Node JS 中间件如何工作?

    每个中间件都可以访问其被附加到的所有路由的 HTTP 请求和响应。 另外,中间件可以终止 HTTP 请求,也可以用 next 将其传递给另一个中间件函数。...当 Web 服务器收到数据请求时,Express 将为你提供一个请求对象,其中包含有关用户及其所请求数据的信息。Express 还使你可以访问响应对象,可以在Web服务器响应用户之前对其进行修改。...该函数在程序每次收到请求时执行。如果有错误,它会仅结束响应,而不会调用后续的中间件或路由处理。...如果是,它将渲染 “NotFound” 模板页面,然后将错误传递到中间件中的下一项。 下一个中间件检查是否抛出了 304(unauthorized)错误。...如果是,它将渲染“Unauthorized”页面,并将错误传递到管道中的下一个中间件。

    3.6K30

    ERR_HTTP_HEADERS_SENT: Cannot set headers after they are sent to the client at S

    该错误表明服务器尝试在响应头已发送给客户端之后,再次设置响应头,这是不被允许的操作。错误含义在 HTTP 协议中,服务器向客户端发送响应时,首先发送响应头,然后发送响应主体。...错误原因该错误通常由以下原因引起:多次发送响应:在处理同一个请求时,服务器代码中多次调用了 res.send()、res.json() 或 res.end() 等方法,导致尝试多次发送响应。...异步操作中的错误处理:在异步操作(如数据库查询、文件读取等)中,未正确处理错误或未在错误发生时终止后续操作,导致在错误处理后仍尝试发送响应。...逻辑错误:代码逻辑中存在分支未正确返回,导致在某些情况下,响应被发送多次。示例分析以下是一个可能导致该错误的示例:app.get('/example', (req, res) => { if (!...异步操作中的注意事项在处理异步操作时,需要特别注意错误处理和响应的发送顺序。

    63210

    Node.js-具有示例API的基于角色的授权教程

    使用Node.js构建的教程 其他可用版本: ASP.NET: ASP.NET Core 3.1, ASP.NET Core 2.2 在本教程中,我们将通过一个简单的示例介绍如何在JavaScript...authorize函数实际上返回2个中间件函数,第一个(jwt({… …)))通过验证Authorization http请求头中的JWT令牌来认证请求。...sub属性是subject的缩写,是用于在令牌中存储项目id的标准JWT属性。 第二个中间件功能根据其角色检查经过身份验证的用户是否有权访问请求的路由。如果验证或授权失败,则返回401未经授权响应。...我发布了另一个稍有不同的示例(包括注册,但不包括基于角色的授权),该示例将数据存储在MongoDB中,如果您有兴趣查看数据的配置方式,可以在NodeJS + MongoDB上进行验证-用于身份验证,注册和验证的简单...在文件顶部附近(在硬编码用户下方),我已经导出了服务方法的定义,因此可以一目了然地查看所有方法,在文件的其余部分包含该方法的实现。

    6.8K10

    关于Node.js,一定要学这个10+万Star项目 !!

    ... } return result;}这段代码在处理大量数据时会阻塞事件循环,导致其他用户请求无法得到响应,超时报错。...,API 服务依然能流畅响应其他请求,用户体验大大提升。...(400).json({ error: err.message }); } // 默认服务器错误 res.status(500).json({ error: '服务器内部错误' });...我最推荐的几条最佳实践在所有的实践中,以下五条是我认为对前端开发转 Node.js 的开发者最有价值的:不要在客户端保存敏感信息 - 看似常识,但很多人会犯的错误使用环境变量存储机密数据 - 不要把数据库密码直接写在代码里优先使用内置方法...- 很多人喜欢引入 lodash,其实原生方法已经足够好一次只处理一个错误 - 嵌套的错误处理是噩梦的开始写在最后说实话,之前我总觉得编码就是实现功能,能跑就行。

    15510

    Node.js中的关注点分离

    我们的示例应用程序是一个简单的用于身份验证的 REST API。当用户注册时,他们的信息被保存在 MongoDB 数据库中。当用户登录时,我们将验证他们的信息,如果验证成功,就返回一个令牌。...在 server.js 文件中,我们将导入加载器和配置文件,并开始监听 PORT。app.js 文件只导入 server.js。...服务实现了应用程序的逻辑,并在向控制器返回必要的响应之前与数据库发生通信。我们创建了一个简单的认证服务文件,其中包含我们的登录和注册逻辑。...路由接收一个请求,将其转发到控制器,然后控制器将其转发到数据库,并向控制器返回一个报告。...这项技术已被证明在构建项目时是非常有用的,无论项目的复杂性或团队规模如何。你肯定不希望在生产环境中出现任何错误!

    6.2K40

    走进RESTful API的世界:从设计到实现的全流程解析

    今天,我就和大家分享一下RESTful API的基础概念、设计原则以及实际项目中的实现过程,带大家从理论到实践,一次性搞懂!什么是RESTful API?在开始动手之前,咱们得先搞清楚这东西是什么。...统一接口:通过统一的格式(如JSON)返回数据,便于客户端解析。RESTful API的设计原则在设计RESTful API时,以下几个原则是我们需要特别注意的:1....状态码体现请求结果通过HTTP状态码告诉客户端请求成功与否,以及具体情况。例如:200 OK:请求成功。201 Created:创建成功。400 Bad Request:请求格式错误。...500 Internal Server Error:服务器错误。4. 返回结构化数据一般使用JSON格式返回数据,清晰易读。...通过遵循资源化、无状态化等设计原则,我们可以构建出语义清晰、易于扩展的API服务。同时,实际开发中的细节也很多,比如权限控制、错误处理、分页和过滤等。

    54010

    Express4.x API (三):Response (译)

    (这句话翻译过来我有些不理解,我就不再翻译,res.end用于结束响应) 快速结束响应而无需任何数据,如果你需要对数据进行响应,取而代之的是使用诸如res.send和res.json res.send(...(500).json(error:'message') res.jsonp([body]) 发送一个JSONP支持的JSON响应,这个方法和req.json()是相同的,除了他选择在JSONP的回调支持...,属性定义视图的局部变量的对象 callback,回调函数,如果提供的话,返回可能的错误和呈现的字符串,但并不自动响应.当错误发生时,该方法在内部调用next(err) res.render('index...allow","deny","ignore" "ignore" 该方法调用一个回调函数fn(err)当传输完成或发生错误时.如果指定了回调函数并发生错误时,回调函数必须通过终止请求响应周期来显式地处理响应过程...(code) 使用此方法为响应设置HTTP状态,这是一个连贯性的Node response.statusCode别名 res.status(403).send(); res.status(400).send

    1.8K100

    Spring Boot Error Response

    本文翻译自:Spring Boot Error Responses 在昨天的文章最后,我提到一个问题,就是我的例子对错误处理的设计不够。..., name); } } 通过http请求客户端——httpie发送HTTP请求,这个工具比curl的好处是:返回值信息有语法高亮、对返回的JSON字符串自动格式化。..., "timestamp": 1449294846060 } 可以看到,由于没有提供name参数,服务器返回的状态码是400:错误的请求。...在响应体中的内容依次如下: error : 错误信息; exception:异常的类型,MissingServletRequestParameterExeption,见名知意,说明是缺少了某个请求参数;...,因此它只处理属于这个控制器的响应,如果我们新建一个类,并用注解@ControllerAdvice修饰,并在这个类中定义上述的异常处理代码,则它会负责处理所有的请求。

    1.1K21

    【Http】一文备忘Http状态码(406,415,422)

    我们就类比爱情,对客户端与服务端交互的状态码进行解释。 2.Server:”你要的我给不了“——406 在http请求中,会在Accept表明客户端希望接收的数据类型。...当请求包含*accept头,在ASP.NET Core*框架中,将会: 按*accept*头中的顺序枚举媒体类型 尝试找到一个能生成*accept*中指定的格式之一的格式化器 找到了,就还罢了,一旦找不到格式化器...如果请求没有Accept头: 使用第一个可以处理对象的格式化器来响应序列化 不执行任何协商,由ASP.NET Core决定返回的格式 Accept: */*,..,.....API 时,与在浏览器中的体验一致: 忽略Accept 若为另行配置,将会使用JSON返回内容 3.Server:“你给的我不要”——415 说回我们问题的初衷,报了415,我这边ajax设置的Content-Type...对于实体模型验证错误: *ASP.NET Core*默认使用的是400状态码-Bad Request { "errors": { }, "type": "https://tools.ietf.org

    2K10

    Express-Request请求和Response响应

    在headers中传入键为name值为chaoren的参数,然后请求后返回结果如下可以获取到请求头中的默认和自定义数据返回对象Response上面说了请求,既然有个请求,那肯定有相应返回值,下面介绍返回对象...否回调函数,返回可能的错误和呈现的字符串,但不执行自动响应,发生错误是该方法在next(err) 内部调用Response.send() 方法 发送http响应send() 方法 只发送一个https响应至请求端...,只接收一个参数,这个参数可以是任何类型之所以可以接收任何类型的参数是因为执行这个方法的时候会自动设置响应头数据类型,即响应头里Conten-Type字段1.当参数为Buffer对象时 Response.send...(Buffer('我是213131313'));});在Postman 中查看请求,会发现返回的响应头中Conten-Type字段值为 application/octet-stream2....,更为用途广泛,所有学习怎样返回json 数据也很重要res.json({ name:'iron man', title:'无敌'})Response.json() 方法只接受一个参数,可以是任何的

    44530

    Flask 学习-69.捕获异常钩子函数errorhandler

    bad request 请求参数不合法时,我们一般会返回400 bad request, 默认返回的是一个html页面 在开发接口的时候,我们希望统一返回json 格式 @app.errorhandler...msg': 'ok'} 当访问一个不存在的地址时,就会返回400的json格式 HTTP/1.0 400 BAD REQUEST Content-Type: application/json Content-Length...", "msg": "请求参数不合法" } 处理 在处理请求时,当 Flask 捕捉到一个异常时,它首先根据代码检索。如果该代码没 有注册处理器,它会根据类的继承来查找,确定最合适的注册处理器。...当一个蓝图在处理抛出异常的请求时,在蓝图中注册的出错处理器优先于在应用中全 局注册的出错处理器。 但是,蓝图无法处理 404 路由错误,因为 404 发生的路由级 别还不能检测到蓝图。...未处理的异常 500 当一个异常发生时,如果没有对应的异常处理器,那么就会返回一个 500 内部服务错误。关于此行为的更多内容参见 flask.Flask.handle_exception() 。

    1.8K20

    5 种高级 NodeJS 技术

    2.使用全局错误处理 我们可以使用 NodeJS 全局错误处理功能,而不是在每个控制器上构建错误响应。 首先,创建一个派生自内置 Error 类的自定义 AppError 类。...在全局错误处理程序中,您可以根据错误对象的 statusCode、status 和 message 属性来格式化错误响应。 您可以自定义此响应格式以满足您的需求。...(200).json({ token }); } catch(error) { next(error } }); 总体而言,这种方法通过将错误处理集中在一个位置来简化错误处理,从而更轻松地在应用程序中维护和自定义错误响应...(400).json({ message: 'You error message'} } }); tryCatchFn 函数接受函数 (fn) 作为输入,并返回一个用 try-catch 块包装原始函数的新函数...将路由与控制器分开 为了实现更有组织性和模块化的代码库,我建议将路由与控制器分开。 这种做法有助于保持清晰的关注点分离,并提高代码的可读性和可维护性。 这是一个演示路由和控制器分离的示例。

    37420

    Web开发避坑指南:默语为你详解502503504400401及Connection Reset(小白自救手册)

    摘要: 嘿,各位奋战在Web开发一线的小伙伴们,我是默语!在我们的日常工作中,与HTTP错误码打交道是家常便饭。...查看应用服务器的日志!这是定位问题的金钥匙。日志中通常会记录应用崩溃的原因或处理请求时的错误信息。...504 Gateway Timeout错误表示作为网关或代理的服务器,在尝试从上游服务器获取响应时,没有在规定的时间内收到响应。...加强输入校验: 在服务器端对所有客户端输入进行严格的校验(格式、类型、范围、长度等),并对校验失败的请求返回明确的400错误和具体的错误信息,方便客户端调试。...WWW-Authenticate头: 当返回401时,应在响应中包含WWW-Authenticate头,告知客户端服务器支持哪些认证方案以及如何进行认证。

    61400

    推荐一个基于 Node.js 的表单验证库

    在执行过程中的一个基本任务是数据验证。...在本文中,我想向你展示如何为你的数据添加防弹验证,同时返回风格良好的格式。 在 Node.js 中进行自定义数据验证既不容易也不快。 为了覆盖所有类型的数据,需要写许多函数。...然后,Datalize 将只使用你指定的字段创建一个对象(在更广泛的上下文对象中以 .form 形式提供),因此你不必再次列出它们。 .form.isValid 属性会告诉你验证是否成功。...所以 .array().select(['read', 'write']) 将检查数组中的每个值是 'read' 还是 'write' ,如果有任何一个值不是其中之一,则返回所有错误的索引列表。...如果很多人有兴趣的话,我也可以为此编写一个教程。 我希望本教程能够帮助你在 Node.js 中构建更好的API,并使用经过完美验证的数据,而不会出现安全问题或内部服务器错误。

    3.1K40
    领券