什么是error-first的回调方式
Error-first回调方式用来同时传递error和data。将错误作为第一个参数,它就必须先检查看看有没有错误先。另外的参数就用来传递data了。
fs.readFile(filePath, function(err, data) {
if(err) {
//处理错误,这里的return很重要,如果发生错误,在此处就会停止了。
return console.log(err);
}
//传递data
console.log(data);
})你是如何避免回调地狱的?
模块化 把回调函数分割成独立的函数
使用控制流的库,比如async
generators结合Promise
async/await
Promise是什么?
概念不多说了,简单来说就是帮助你更好地处理异步操作的东西。
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('result');
}, 100)
})
.then(console.log)
.catch(console.error)stub是什么? 举个例子?
stub是用来模拟组件/模块行为的东西,它在测试阶段为函数调用提供内部响应。
例子是写文件,但实际上并没有这么做
var fs = require('fs');var writeFileStub = sinon.stub(fs, 'writeFile', function(path, data, cb) {
return cb(null)
})
expect(writeFileStub).to.be.called
writeFileStub.restore();
如何保证你的HTTP cookies安全不受XSS攻击
在set-cookieHTTP头部加上这几个信息:
HttpOnly-这个属性用来防止跨站脚本攻击,它不允许cookie被JavaScript代码获取。
secure-这个属性告诉浏览器只有在HTTPS连接时才发送cookie
像这样:
Set-Cookit: sid=<cookit-value>; HttpOnly下面这段代码有什么问题
new Promise((resolve, reject) => {
throw new Error('error')
}).then(console.log)then后面没有跟上catch,这样的话如果出错的这段代码还是默默地运行,并不会告诉你哪里出错了。
修改后:
new Promise((resolve, reject) => {
throw new Error('error')
}).then(console.log).catch(console.error)如果你正在调试一个大型项目,你不知道哪个Promise可能会有问题,可以使用unhandledRejection。它会打印出所有未经处理的Promise异常
process.on('unhandledRejection', (err) => {
console.log(err)
})下面的代码有什么问题?
function checkApiKey(apiKeyFromDb, apiKeyReceived) {









