问题背景
在使用 Express.js 开发 web 应用时,我们可能会遇到类似下面这样的错误:
TypeError: Cannot read property 'x' of undefined
这个错误通常发生在访问 request
或 response
对象中的某个属性时,例如:
app.get('/path', function(req, res) { console.log(req.body.x); });
可能导致的错误信息就是:
TypeError: Cannot read property 'x' of undefined
这个错误的原因是什么呢?如何解决它呢?
解决方法
在 Express.js 应用中,request
与 response
对象是由 Express.js 在接收到请求时自动创建的。也就是说,当请求到达服务器时,Express.js 负责创建一个 request
对象,用于封装该请求的数据,同时也会创建一个 response
对象,用于封装服务器端的响应数据。
由于 request
与 response
对象是在应用程序中被创建的,它们并不是全局变量,因此,当我们在应用程序的某个地方使用这些对象时,一定要确保它们已经被创建。否则就会出现类似 “TypeError: Cannot read property 'x' of undefined” 的错误。
app.get('/path', function(req, res) { console.log(req.body.x); });
在上面的例子中,如果请求中不包含 body
属性,那么 req.body
就会是 undefined
,而 undefined
并没有 x
属性,因此就会出现 “TypeError: Cannot read property 'x' of undefined” 的错误。
所以,在使用 request
或 response
对象中的属性或方法时,一定要加上判断语句,判断其是否已经被创建。例如:
app.get('/path', function(req, res) { if (req.body) { console.log(req.body.x); } });
总结
“TypeError: Cannot read property 'x' of undefined” 错误是在 Express.js 中可能出现的一种常见错误。它的产生原因是使用 request
或 response
对象中的属性或方法时,没有对这些对象是否已经被创建进行判断。解决这个错误的方法就是加上判断语句,确保在使用 request
或 response
对象前已经进行了初始化操作。
该文提供了一个代码范例,在获取 request
对象的某个属性之前先判断该属性是否存在。对于一些开发者来说,这个问题可能不如从 React 根据错误提示查找问题常见。但这个问题在基础的 web 和 node.js 开发中是不可避免的,故解决此类问题也是一种必要的基础能力。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654b65a27d4982a6eb5419fc