VS 代码 - 类型错误:无法读取未定义的属性"到大写"



当我在VSCode上用js修改if语句时,我得到了一个TypeError。

在我添加.toUpperCase((方法之前,以下if语句有效:

`ourApp.post('/answer', function(req, res) {
if (req.body.skyColor.toUpperCase() == "BLUE") {
res.send(
<p>Congrats, that is the correct answer!</p>
<a href="/">Back to homepage</a>
)`

**请注意,我确实在需要的地方有模板文字,但它们与上面的格式不一致,所以我不得不删除它们。

但在我添加了上面的.toUpperCase((方法后,我得到了以下TypeError:

TypeError:无法读取未定义的属性"toUpperCase"在/home/ryan/JavaScript/test.js:16:27在Layer.handle[as-handle_request](/home/ryan/JavaScript/node_modules/express/lib/router/Layer.js:95:5(在next(/home/ryan/JavaScript/node_modules/express/lib/router/route.js:137:13(在Route.dispatch(/home/ryan/JavaScript/nod_modules/express/lib/router/Route.js:112:3(在Layer.handle[as-handle_request](/home/ryan/JavaScript/node_modules/express/lib/router/Layer.js:95:5(在/home/ryan/JavaScript/node_modules/express/lib/router/index.js:281:22位于Function.prrocess_params(/home/ryan/JavaScript/nod_modules/express/lib/router/index.js:335:12(在next(/home/ryan/JavaScript/node_modules/express/lib/router/index.js:275:10(在/home/ryan/JavaScript/node_modules/body-parser/lib/read.js:130:5在invokeCallback(/home/ryan/JavaScript/node_modules/raw-body/index.js:224:16(

我想我的express安装有问题吗?不过,我在工作文件夹中安装了package.json文件和所有这些文件,所以我不确定哪里可能有损坏的文件或任何东西。

有什么想法吗?

它现在工作了,我相信我知道为什么:

我退出了VS Code,并重新启动了大约3-4次。上次,我在目录中查找了工作文件夹并打开了它(右键单击"用代码打开"(。现在一切正常。

我确信我已经在VSC中的那个文件夹中工作了,所以我有点困惑到底发生了什么变化,但它有效。。。所以_(ツ)_/

从您的评论来看,您的传入请求似乎来自<form>

而且,在其默认配置中,Express不会自动为您读取和解析任何POST或PUT请求的主体。相反,您需要安装正确的中间件,它将为您读取和解析正文。在您的情况下,来自浏览器的传入<form>通常是application/x-www-form-urlencodedMIME类型。要解析它,您需要添加以下行:

app.use(express.urlencoded({extended:true}((

app.post()处理程序之前的某个时刻。你可以在这里看到这方面的快速文档。这个中间件将检查主体的mime类型,如果它是表单通常设置的上述类型,那么它将读取传入请求的主体并对其进行解析,并将结果放入req.body中,这样您的请求处理程序就可以访问req.body中的数据。

如果在安装了这个中间件之后,它仍然不起作用,那么我们需要更多地了解传入http请求中的确切内容,这样我们才能确切地看到正文中的内容。假设这来自浏览器,

Express默认情况下不解析正文。它只能作为流使用。

我看到的最好的解决方案是在端点之前使用json()中间件。

尝试添加:

// parse application/json
app.use(express.json())
// Your endpoint here

app.use()函数意味着您获得的每个请求都将通过指定的方法,在这种情况下,它将把请求的主体解析到req.body字段中。

这假设您的端点将使用正确的Header(Content-Type: "application/json"(进行调用,并且您确实发送了格式正确的Json正文。

检查主体的内容是否具有您期望的内容是一个好主意,此断言将防止代码出现许多错误和崩溃。

为此,Npm上有许多用于模式验证的库,只需选择最适合您的库即可。

最新更新