Node / Javascript中推荐的最佳模式是什么,以避免将大量参数传递给函数?
function create(firstName, lastName, address, phoneNumber, username, password, dateOfBirth, age) {
...
}
它应该接受一个物体吗?
const input = {
firstName: 'John',
lastName: 'Doe',
...
};
function create(input) {
}
对象似乎容易出错,因为它没有验证它应包含的属性数量和密钥名称。
答案 0 :(得分:1)
对象似乎容易出错,因为没有对数字进行验证 它应包含的属性和键。
我可以传入一个函数和一个HTML元素,而不是第一个函数;它可能会失败。
它的核心是任何脚本语言的基本问题。知道你搞砸了一个函数的唯一方法通常是运行时错误。一旦它被正确编码,那就不用担心了。
请注意,像TypeScript这样的语言对那些希望在编译时#34;强制执行此类正确性的人们有很大帮助。
答案 1 :(得分:1)
它应该接受一个物体吗?
Node几乎专门用于Web服务器。在这种情况下,您的入口点是典型的req.body
,一个对象。谁知道那个对象到底是什么?所以你在服务器前面处理错误:
function bindUser(postBody, callback) {
var user = {};
if (!postBody.firstName) {
return callback(new Error("Missing firstName"));
}
user.firstName = postBody.firstName;
if (!postBody.lastName) {
return callback(new Error("Missing lastName"));
}
user.lastName = postBody.lastName;
if (!postBody.email) {
return callback(new Error("Missing email"));
}
user.email = postBody.email.toLowerCase();
callback(null, user);
}
恭喜,您已经拥有了一个已知对象,并且您将来的调试具有一致的起点。现在,您构建了执行一项特定任务的辅助函数,例如结合全名:
function combineName(firstName, lastName) {
return firstName + " " + lastName;
}
user.fullName = combineName(user.firstName, user.lastName);
将错误处理重点放在不完全包含的环境中,即I / O和外部模块。除此之外,保持你的功能小而具体,他们不需要10个参数和大量的守卫墙。你未来的调试自己会感谢你。
所以要专门解决这个问题:
Node / Javascript中推荐的最佳模式是什么,以避免将大量参数传递给函数?
设计你的应用程序,使函数不需要10个参数。
答案 2 :(得分:0)
如果您在示例中执行此操作,则可以使用Object.keys(input)
访问密钥,然后您可以检查长度或执行其他验证。您可以使用以下内容查看属性是否至少为3个字符:
var keys = Object.keys(input);
keys.every(function(key) {
return key.length > 3;
});