美文网首页
Node填坑

Node填坑

作者: Devildi已被占用 | 来源:发表于2018-01-23 18:16 被阅读0次

跨域

由于浏览器的同源限制,其执行JS脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。
http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域),
http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域),
http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域),
http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域),
http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域),
localhost和127.0.0.1虽然都指向本机,但也属于跨域。

如何解决跨域

1 JSONP/代理
2 修改header
3 koa中,使用cors模块

const Koa = require('koa');
const cors = require('@koa/cors');
const app = new Koa();
app.use(cors())

Koa2详解

application

koa的入口构造函数,通过new Koa()生成一个koa实例app,通过app.use将中间件函数传入数组中,通过app.listen启动http服务器的同时完成以下动作:

  1. 处理存放中间件函数的数组
  2. 使用node原生对象reqres创建执行上下文,生成处理后的context对象
  3. 依次将数组中的中间件函数应用于2中生成的context执行环境中
  4. 对请求做出响应

ctx

将node中原生的reqres对象的方法和属性,挂载到context

req

通过get set方法可以拿到网络请求的相关属性

res

非常常用且与直接面向客户端的核心模块,也通过get set方法获得。

middlewares

koa中的中间件均为async函数,执行顺序为洋葱模型,通过await next()传递中间件的控制权。

koa-compose

控制中间件的执行顺序。

node进程与事件循环

由于node天生单线程的缘故,在使用node开发服务器的时候,鲁棒性成了其不得不进行的考量,因此,当node有繁重计算任务的时候,使用node子进程替代主进程,主进程监听子进程,可有效提高运行服务的稳定性。

const cp = require('child_process')
const childProcess = cp.fork(script, [])//通过fork方法派生出子进程
let invoked = false 
childProcess.on('error', err => {})
childProcess.on('exit', code => {})
childProcess.on('message', data => {
  //核心方法
})

对于node异步非阻塞的理解

当A调用B的时候,当A"原地"等待B的调用结果时,则整个系统为同步阻塞的;当A不需要等待B的结果时,则为异步的,实现异步的方式有A的主动轮询或者B的回调通知,异步大部分情况下不会导致阻塞,一句话总结:同步异步是过程,在于有无消息通知的机制;阻塞非阻塞是状态,在于调用方是干等结果还是各不耽误。

一个事件循环中的异步函数优先级

node中的libuv封装了各个OS的IO操作,对外提供了一致的访问接口,当我们在讨论node事件循环时,其实我们在讨论的是libuv

node事件循环(来自node官网)
  1. prosess.nextTick,不属于事件循环的任一阶段,优先执行
  2. Promise.resolve,同上,优先级仅次于prosess.nextTick
  3. 定时器,当没有prosess.nextTick和 Promise.resolve时,事件循环会进入定时器Timers阶段
  4. 执行OS的IO回调
  5. 执行poll中的callback
  6. 执行check阶段的setImmediate函数

node新特性

  1. 通过util模块提供的接口改写callback函数为Promise
const util = require('util')

util.promisify(fs.readFile)('./path')
.then(() => {})

Mongoose采坑

.save()失效

在更新数据时使用.save()方法竟然莫名失效了!这个问题找了N久,最终在Schema中发现了问题之所在:Schema中的一个字段被我设置成了Schema.Types.Mixed,就是这个Mixed导致.save()失效,改成[ ]后,搞定!

exec()

类似model.find()为一次数据库查询,即queryquery立刻执行,exec()方法使query变为标准的promise,即await model.find().exec();同时,.then()方法也可将一个query转为promise,进行链式操作。

安装node-sass出错的解决办法

使用cnpm源即可

SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install node-sass

相关文章

  • Node填坑

    跨域 由于浏览器的同源限制,其执行JS脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。http...

  • node.js填坑

    关于在node.js 导出模块的问题填坑 构造函数 的导出跟es6的class类导出的顺序问题 module.ex...

  • ionic 填坑之 Cannot download node

    前言 最近准备学习 ionic ,结果刚创建工程就开始踩坑了,好吧,把坑填一下 错误 解决方法 原因是node-s...

  • 再挖个坑,明天填,push的

    再挖个坑,明天填,push的 再挖个坑,明天填,push的 再挖个坑,明天填,push的 再挖个坑,明天填,pus...

  • Wendy Shijia 的「 Escher's Gallery

    开始填坑。太多坑没填以致可以从容选择先填哪个,然而也忘了坑长什么样、怎么填。不过还是希望该填的坑能尽量于月底前填完...

  • vue-cli构建vue项目

    vue-cli构建vue项目 参考资料:Vue2.0 新手完全填坑攻略—从环境搭建到发布 1.Node.js安装 ...

  • composer的原理和使用(下)--先占坑

    占坑,后面慢慢填坑

  • RAC

    填坑

  • 填坑

    填坑。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

  • 彩铅荷花原创(待续)

    填坑

网友评论

      本文标题:Node填坑

      本文链接:https://www.haomeiwen.com/subject/zrmsaxtx.html