解决 Express.js 中的 “TypeError: Cannot read property 'x' of undefined” 错误

问题背景

在使用 Express.js 开发 web 应用时,我们可能会遇到类似下面这样的错误:

这个错误通常发生在访问 requestresponse 对象中的某个属性时,例如:

可能导致的错误信息就是:

这个错误的原因是什么呢?如何解决它呢?

解决方法

在 Express.js 应用中,requestresponse 对象是由 Express.js 在接收到请求时自动创建的。也就是说,当请求到达服务器时,Express.js 负责创建一个 request 对象,用于封装该请求的数据,同时也会创建一个 response 对象,用于封装服务器端的响应数据。

由于 requestresponse 对象是在应用程序中被创建的,它们并不是全局变量,因此,当我们在应用程序的某个地方使用这些对象时,一定要确保它们已经被创建。否则就会出现类似 “TypeError: Cannot read property 'x' of undefined” 的错误。

在上面的例子中,如果请求中不包含 body 属性,那么 req.body 就会是 undefined,而 undefined 并没有 x 属性,因此就会出现 “TypeError: Cannot read property 'x' of undefined” 的错误。

所以,在使用 requestresponse 对象中的属性或方法时,一定要加上判断语句,判断其是否已经被创建。例如:

总结

“TypeError: Cannot read property 'x' of undefined” 错误是在 Express.js 中可能出现的一种常见错误。它的产生原因是使用 requestresponse 对象中的属性或方法时,没有对这些对象是否已经被创建进行判断。解决这个错误的方法就是加上判断语句,确保在使用 requestresponse 对象前已经进行了初始化操作。

该文提供了一个代码范例,在获取 request 对象的某个属性之前先判断该属性是否存在。对于一些开发者来说,这个问题可能不如从 React 根据错误提示查找问题常见。但这个问题在基础的 web 和 node.js 开发中是不可避免的,故解决此类问题也是一种必要的基础能力。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654b65a27d4982a6eb5419fc


纠错
反馈