删除分号时,Nodejs表示API 500内部服务器错误;

Arp*_*pit 0 node.js express

我没有习惯;在javascript代码中使用分号.这是我的API,但这不起作用.在这里回应显示500 Internal Server Error

router.post('/addRows', function (req, res) {
    const saveData = []
    [1,2,3,4,5,6,7,8,9,10].map((i) => {
        console.log(i)
        saveData.push(i)
        if (saveData.length === 10) {
            res.status(200).json({'data': saveData});
        }
    })
})
Run Code Online (Sandbox Code Playgroud)

但如果我;在第二行后添加分号,则此代码正常工作.在这里回应显示200 OK

router.post('/addRows', function (req, res) {
    const saveData = [];
    [1,2,3,4,5,6,7,8,9,10].map((i) => {
        console.log(i)
        saveData.push(i)
        if (saveData.length === 10) {
            res.status(200).json({'data': saveData});
        }
    })
})
Run Code Online (Sandbox Code Playgroud)

什么是问题.请描述一下

Jam*_*ice 5

您遇到了自动分号插入的问题之一,JavaScript的功能允许分号"可选".

在您的情况下,当您在数组赋值后错过分号时,下一行中的数组文字将被解释为对数组中元素的引用,这当然是未定义的.您可以将代码读作:

router.post('/addRows', function (req, res) {
    const saveData = [][1,2,3,4,5,6,7,8,9,10].map((i) => {
        console.log(i)
        saveData.push(i)
        if (saveData.length === 10) {
            res.status(200).json({'data': saveData});
        }
    })
})
Run Code Online (Sandbox Code Playgroud)

这可能看起来不是有效但它是 - 第二个数组文字被解析为包含带逗号("分组")运算符的表达式的属性查找.逗号运算符返回其最终操作数,因此您可以简化上述操作:

router.post('/addRows', function (req, res) {
    const saveData = [][10].map((i) => {
        console.log(i)
        saveData.push(i)
        if (saveData.length === 10) {
            res.status(200).json({'data': saveData});
        }
    })
})
Run Code Online (Sandbox Code Playgroud)

添加分号时,可以消除歧义,并将第二个数组文字解析为数组文字而不是属性访问器.