node.js初识

Node.js 学习笔记

代码风格

var foo = 'bar'
var foo ='bar'
var foo= 'bar'
var foo = "bar"

if (true) {
  console.log('hello') 
}

if (true) {
    console.log('hello') 
}

if (true ){
      console.log('hello') 
}
  • 服务端渲染

    • 说白了就是在服务端使用模板引擎
    • 模板引擎最早诞生于服务端,后来才发展到了前端
  • 服务端渲染和客户端渲染的区别

    • 客户端渲染不利于 SEO 搜索引擎优化
    • 服务端渲染是可以被爬虫抓取到的,客户端异步渲染是很难被爬虫抓取到的
    • 所以你会发现真正的网站既不是纯异步也不是纯服务端渲染出来的
    • 而是两者结合来做的
    • 例如京东的商品列表就采用的是服务端渲染,目的了为了 SEO 搜索引擎优化
    • 而它的商品评论列表为了用户体验,而且也不需要 SEO 优化,所以采用是客户端渲染
  • jQuery 的 each 和 原生的 JavaScript 方法 forEach

    • EcmaScript 5 提供的
      • 不兼容 IE 8
    • jQuery 的 each 由 jQuery 这个第三方库提供
      • jQuery 2 以下的版本是兼容 IE 8 的
      • 它的 each 方法主要用来遍历 jQuery 实例对象(伪数组)
      • 同时它也可以作为低版本浏览器中 forEach 替代品
      • jQuery 的实例对象不能使用 forEach 方法,如果想要使用必须转为数组才可以使用
      • [].slice.call(jQuery实例对象)
  • 模块中导出多个成员和导出单个成员

  • 301 和 302 状态码区别

    • 301 永久重定向,浏览器会记住
    • 302 临时重定向
  • exports 和 module.exports 的区别

    • 每个模块中都有一个 module 对象
    • module 对象中有一个 exports 对象
    • 我们可以把需要导出的成员都挂载到 module.exports 接口对象中
    • 也就是:moudle.exports.xxx = xxx 的方式
    • 但是每次都 moudle.exports.xxx = xxx 很麻烦,点儿的太多了
    • 所以 Node 为了你方便,同时在每一个模块中都提供了一个成员叫:exports
    • exports === module.exports 结果为 trues
    • 所以对于:moudle.exports.xxx = xxx 的方式 完全可以:expots.xxx = xxx
    • 当一个模块需要导出单个成员的时候,这个时候必须使用:module.exports = xxx 的方式
    • 不要使用 exports = xxx 不管用
    • 因为每个模块最终向外 return 的是 module.exports
    • exports 只是 module.exports 的一个引用
    • 所以即便你为 exports = xx 重新赋值,也不会影响 module.exports
    • 但是有一种赋值方式比较特殊:exports = module.exports 这个用来重新建立引用关系的
    • 之所以让大家明白这个道理,是希望可以更灵活的去用它
  • Node 是一个比肩 Java、PHP 的一个平台

    • JavaScript 既能写前端也能写服务端
moudle.exports = {
  a: 123
}

// 重新建立 exports 和 module.exports 之间的引用关系
exports = module.exports

exports.foo = 'bar'
Array.prototype.mySlice = function () {
  var start = 0
  var end = this.length
  if (arguments.length === 1) {
    start = arguments[0]
  } else if (arguments.length === 2) {
    start = arguments[0]
    end = arguments[1]
  }
  var tmp = []
  for (var i = start; i < end; i++) {
    // fakeArr[0]
    // fakeArr[1]
    // fakeArr[2]
    tmp.push(this[i])
  }
  return tmp
}

var fakeArr = {
  0: 'abc',
  1: 'efg',
  2: 'haha',
  length: 3
}

// 所以你就得到了真正的数组。 
[].mySlice.call(fakeArr)
  • 文件路径中的 / 和模块标识中的 /
  • nodemon
  • Express
    • art-template 模板引擎的配置
    • body-parser 解析表单 POST 请求体
  • 技术只是一种解决问题的手段、工具而已
    • 第三方的东西,不要纠结
    • 先以解决问题为主
  • 详解了 express 静态服务 API
    app.use('/public/', express.static('./public'))
    

版权声明:本文为qq_51212018原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。