什么是error-first的回调方式

Error-first回调方式用来同时传递error和data。将错误作为第一个参数,它就必须先检查看看有没有错误先。另外的参数就用来传递data了。

fs.readFile(filePath, function(err, data) {
 if(err) {
  //处理错误,这里的return很重要,如果发生错误,在此处就会停止了。
  return console.log(err);
 }
 //传递data
 console.log(data);
})

你是如何避免回调地狱的"nofollow" target="_blank" href="https://www.npmjs.com/package/async">async

  • generators结合Promise
  • async/await
  • Promise是什么"htmlcode">

    new Promise((resolve, reject) => {
     setTimeout(() => {
      resolve('result');
     }, 100)
    })
     .then(console.log)
     .catch(console.error)

    stub是什么"htmlcode">

    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头部加上这几个信息:

    1. HttpOnly-这个属性用来防止跨站脚本攻击,它不允许cookie被JavaScript代码获取。
    2. 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)
    })

    下面的代码有什么问题"htmlcode">

    function checkApiKey(apiKeyFromDb, apiKeyReceived) {
     if (apiKeyFromDb === apiKeyReceived) {
      return true
     }
     return false
    }

    说实话我刚看到的时候也是一脸懵逼,这有啥问题?不是很正常的一个if else代码吗。

    不过这不是普通的if else代码,这是用来比较安全证书的代码,这个时候你不能泄露一丁点的信息,所以确保他们在一定的时间内进行比较。否则的你的应用就可能受到时序攻击了。

    什么是时序攻击(timing attacks)?Node.js使用的V8引擎试图从表示层面上优化代码。它一个字符一个字符地比较,一旦找到不符合它就停止比较。

    你可以使用cryptiles这个npm模块来解决这个问题

    function checkApiKey(apiKeyFromDb, apiKeyReceived) {
     return cryptiles.fixedTimeCimparison(apiKeyFromDb, apiKeyReceived)
    }

    如何通俗地解释时序攻击(timing attack)"text-align: center">总结几道关于Node.js的面试问题

    下面的代码会输出什么

    Promise.reso(1)
     .then((x) => x + 1)
     .then((x) => {throw new Error('My Error')})
     .catch(() => 1)
     .then((x) => x + 1)
     .then((x) => console.log(x))
     .catch(console.error) 
    1. 一个新的Promise被创造出来,它会解析参数1
    2. 解析后的值会被加上1(现在是2),并立即返回了这个2
    3. 解析的值被丢弃,抛出一个异常
    4. 异常被丢弃,新的值1被返回
    5. catch后运行不会停止,在异常处理之前,它继续运行,一个新的,增加了1后的值2被返回
    6. 返回值被打印出来
    7. 这一行不会运行,因为没有异常

    总结

    以上就是关于Node.js的几道面试题,希望本文的内容对大家能有所帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

    风云阁资源网 Design By www.bgabc.com
    广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
    免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
    风云阁资源网 Design By www.bgabc.com

    《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

    暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

    艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

    《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。