我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

express中,有个express.json()的中间件,作用是自动解析req.body里面的内容,json字符串转json对象。其实写法和用法都很简单,一秒就懂。这里还阐述了一下自定义实现这个express.json()中间件的方式方法,算是抛砖引玉。

苏南大叔:exprss如何解析客户端提交的json字符串数据?自定义中间件 - express-json
exprss如何解析客户端提交的json字符串数据?自定义中间件(图3-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:nodejs@20.18.0,chrome@131.0.6778.140,express@4.21.2。这个express.json()中间件是express`自带的,不用额外安装。

express.json()

本文例子,建立在一个很不常见的post类型(通常通过js发送请求)上,它的enctypeapplication/json。它发送的数据是个json的字符串,最终通过中间件express.json()的解析,把req.body的内容,解析为json对象。

中间件的使用方式,有两种。可以全局使用:

app.use( express.json() );

也可以在特定的路由上【推荐】,使用它。例如:

app.post("*", express.json(), (req, res) => {
//...
});

苏南大叔:exprss如何解析客户端提交的json字符串数据?自定义中间件 - 使用方案一
exprss如何解析客户端提交的json字符串数据?自定义中间件(图3-2)

本文内容的更多例子,可以参考:

自定义中间件 express.json()

express.json()的运行逻辑:
作为Express.js中的一个中间件,express.json()通过拦截请求在到达路由处理程序之前来处理请求。如果请求的Content-Type头部设置为application/json,它会将请求体从JSON字符串解析为JavaScript对象。解析后,生成的JavaScript对象会附加到req.body属性上,使其在后续的路由处理程序或中间件中容易访问。

这段代码是自定义模拟了express.json(),可以用作自定义类型的各种逻辑。参考这段代码,可以做更多的扩展功能。

function myExpressJsonParser(req, res, next) {
  if (req.headers["content-type"] === "application/json") {
    let data = "";
    req.on("data", (chunk) => {
      data += chunk;
    });
    req.on("end", () => {
      try {
        req.body = JSON.parse(data);
        next();
      } catch (error) {
        res.status(400).send("无效的JSON");
      }
    });
  } else {
    next();
  }
}

这个中间件,也一样有全局和局部两种写法:

app.use( myExpressJsonParser );

也可以在特定的路由上【推荐】,使用它。例如:

app.post("*", myExpressJsonParser, (req, res) => {
//...
});

苏南大叔:exprss如何解析客户端提交的json字符串数据?自定义中间件 - 使用方案二
exprss如何解析客户端提交的json字符串数据?自定义中间件(图3-3)

注意:自定义的这个中间件,直接使用名称myExpressJsonParser,写法上没有()

相关文章

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   express