以下数据从request()库返回。

var data = [{
    service: "trains",
    ...
}, {
    service: "buses",
    ...
}]


我在NodeJS应用程序上有以下代码。

request(options)
.then(data => {
    data.forEach(record => {
        if (record.service !== 'buses') {
            return next('You do not have permission to access buses.')
        }
        return next()
    })
})
.catch(err => next(err))


因此,当此代码在Node上运行时,它总是评估为false吗?这对我来说很奇怪,因为在没有请求的情况下运行此程序,而直接使用原始响应似乎可以正常工作吗?我猜这是异步行为的问题吗?

最佳答案

您正在遍历数组的所有元素,因此,如果第一个元素与“ buss”不匹配,则将导致“您无权访问总线”。

我认为您正在寻找的是一种检查元素是否存在于数组中的方法。在您的情况下,例如Array.filter

.then(data => {
    if (data.filter(el => el.service === 'buses').length === 0) {
        return next('You do not have permission to access buses.');
    }
    return next();
})

07-28 08:55