假设我们假设有一组包含用户及其ID的对象,如下所示:
var Users = [{
id: 1,
name: "Bob",
},
{
id: 2,
name: "Alice",
},
{
id: 3,
name: "Pete",
}];
现在,如果我有一个异步函数试图通过他们的ID 使用用户输入来获取用户(意味着此函数将从不受信任的来源接收他们的id),它可能看起来像以下内容:
function getUser(id) {
var user = Users.filter(user => user.id === id);
// working with input
user.age = 12;
}
现在,当然这只是一个例子。
但是,如果 - 在上述函数中 - 用户将提供无效或不存在的id并使用(例如user.age = 12
),则会抛出错误。
由于此错误不是程序错误,因此nodejs不应该崩溃 - 但很明显,它仍然会崩溃。使用一个函数,这不是一个巨大的问题(一个小if
检查不会受到伤害) - 但在try / catch块中包含数百个函数并不是最佳的。
如何整体处理操作错误?
最后但并非最不重要的一点是,如果函数异步处理数据,怎么会这样呢?
答案 0 :(得分:1)
当你说Node.js will crash
时,我认为我并不理解这一点,但这里有一些指示它不会崩溃。
您可以检查提供的ID是否存在且是否为字符串
if (id && typeof id === 'string')
您可以检查异步通话中收到的年龄是否存在并且是一个数字
if (!err && user && user.age && typeof user.age === 'number')
有更好的方法可以进行此类检查并防范这些情况。
Validator:执行简单验证的节点模块
lodash:节点实用程序库(checkout isEmpty())
崩溃(主要是未捕获的异常)在发生非允许操作时发生,例如:访问未定义的属性。还有其他这样的情况。但这可以用任何语言发生。当您访问null和崩溃的方法时,Java可以抛出NPE(NullPointerException)。