osr*_*srl 8 javascript node.js
我用这个包。我console.log在slug函数的开头添加了这些。
function slug(string, opts) {
console.log('log 1: -------');
console.log('log 2: ' + string);
console.log('log 3: ' + typeof string);
string = string.toString();
....
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
log 1: -------
log 2: Yüzey Aktif Maddeler
log 3: string
/Users/------/seeder/node_modules/mongodb/lib/utils.js:99
process.nextTick(function() { throw err; });
^
TypeError: Cannot read property 'toString' of undefined
at slug (/Users/------/seeder/node_modules/slug/slug.js:16:20)
at Object.createSlug (/Users/------/seeder/seeder/utils.js:4:9)
at getContent (/Users/------/seeder/seeder/content-seeder.js:345:22)
at topic.contents.forEach.content (/Users/------/seeder/seeder/content-seeder.js:425:31)
at Array.forEach (native)
at /Users/------/seeder/seeder/content-seeder.js:424:21
at /Users/------/seeder/node_modules/mongodb/lib/collection.js:523:5
at /Users/------/seeder/node_modules/mongodb/lib/collection.js:701:5
at handleCallback (/Users/------/seeder/node_modules/mongodb/lib/utils.js:96:56)
at executeCommands (/Users/------/seeder/node_modules/mongodb/lib/bulk/ordered.js:405:12)
Run Code Online (Sandbox Code Playgroud)
即使string参数的类型是字符串,也会string.toString()引发TypeError。它说字符串是不确定的。
我不是一个经验丰富的js开发人员。为什么会这样?
编辑:我从此功能调用
function getContent(content, categoryId) {
console.log(content.topicVideo);
return {
// _id: Random.id(),
// other properties
contentSlug: slug(content.topicVideo.contentName, {
lower: true
})
};
}
Run Code Online (Sandbox Code Playgroud)
新日志:
{ id: '197505065',
categorySort: 18,
categoryName: 'Hayat?m?zda Kimya',
contentSort: 2,
contentName: 'Yüzey Aktif Maddeler',
fileName: 'KonuAnlatimi.mp4' }
Run Code Online (Sandbox Code Playgroud)
编辑:
我在slug函数的末尾添加了一个日志。
console.log(result);
return result;
};
Run Code Online (Sandbox Code Playgroud)
这将打印结果,然后引发错误。
log 1: -------
log 2: Yüzey Aktif Maddeler
log 3: string
log 4: Yüzey Aktif Maddeler
yuzey-aktif-maddeler
Run Code Online (Sandbox Code Playgroud)
编辑:我认为这一行给出了提示:
/Users/------/seeder/node_modules/mongodb/lib/utils.js:99
process.nextTick(function() { throw err; });
Run Code Online (Sandbox Code Playgroud)
我认为它记录了正确的字符串,但是在未记录的情况下未记录下来却失败了。这可能吗?我发现content.topicVideo.contentName之一实际上是未定义的。但是不记录错误就抛出错误。这有可能吗?
为了确保.toString()不会引发错误,您可以:
string = "" + string; // amends the value to an string, even if its undefined or null etc
Run Code Online (Sandbox Code Playgroud)
代替:
string = string.toString();
Run Code Online (Sandbox Code Playgroud)
但是,您也可以检查string的值是undefined还是null。另请参阅此处。
也许你应该检查字符串是否有假值(可选,如果它不是字符串)
function slug(string, opts) {
console.log('log 1: -------');
console.log('log 2: ' + string);
console.log('log 3: ' + typeof string);
if(string)
string = string.toString();
....
}
Run Code Online (Sandbox Code Playgroud)
来自 MDN:
虚假
假值是在布尔上下文中计算时转换为 false 的值。
有关 JavaScript 中虚假值的更多信息,请参见此处