本文共 3132 字,大约阅读时间需要 10 分钟。
Node.js 每年进行两次大的发布,2017年10月,Node.js发布了 9.0 版本,与此同时, Node.js 8.9.0 成为了最新的 LTS 版本。这意味着对 8.9.0 的支持将会维持到2019年底,此后的一个LTS版本将会是 Node.js 10
查看
Node 8.4 首次支持了http/2
const http2 = require('http2');const server = http2.createServer();server.on('stream', (stream, requestHeaders) => { stream.respond({ ':status': 200, 'content-type': 'text/plain' }); stream.write('hello '); stream.end('world');});server.listen(8000);
但由于仍处于实验性阶段,运行时需要加上—expose-http2
参数
$ node --expose-http2 h2server.js
而在node 9中去除了这一参数,可以直接使用
$ node h2server.js
当然由于现在主流浏览器只有在HTTPS时才启用HTTP2,我们要启动一个https的服务器,可以参考
其他关于http/2的变化还包括:
maxSessionMemory
,限制单个http2线程允许使用的内存上限,一旦超过这个值,http2请求将被拒绝Http2Session
和 Http2Stream
实例的基本计时信息。Http2Stream
和Http2Session
的关闭方式,Http2Stream.prototype.rstStream()
方法被移动至 Http2Stream.prototype.close()
中Http2Session
上引入了新的属性来确定会话是否安全关于http/2:
util.isDeepStrictEqual(value1, value2)
,可进行两个值的深度比较,返回一个布尔值。此前我们常用assert.deepStrictEqual()
进行比较,后者在两个值不相等时会抛出异常。const { isDeepStrictEqual } = require('util'); const isEqual = isDeepStrictEqual({ a: '1' }, { a: 1 }); console.log(isEqual); //false const { deepStrictEqual } = require('assert') const isEqual = deepStrictEqual({ a: '1' }, { a: 1 }); // throw new errors.AssertionError
util.callbackify
,可以将 Promise 转化为callback形式的函数,适用于解决一些兼容性问题的场景:const { callbackify } = require('util') async function promiseDemo () { await Promise.resolve() } callbackify(promiseDemo)(function (err) { if (err) { return console.error(err) } console.log('finished without an error') })
debuglog()
中使用通配符,通过 NODE_DEBUG=foo*
环境运行const util = require('util'); const debuglog = util.debuglog('foo-bar'); debuglog('hi there, it\'s foo-bar [%d]', 2333);
request.setTimeout()
就会调用socket.setTimeout()
。 这使得即使底层的套接字永不连接,也会在请求上发出超时事件。在 Node.js 9 中,socket.setTimeout()
仅在底层套接字成功连接时被调用。Node.js核心代码库正在慢慢迁移到一个新的错误系统,Node.js 9 中采用了更严谨的错误码
在Node.js 9 之前,你可能会这样处理错误:
if (err.message === 'Console expects a writable stream instance') { //do something with the error}
现在则应该用这种方式进行处理:
if (err.code === 'ERR_CONSOLE_WRITABLE_STREAM') { //do something with the error}
这可能会导致升级中的各种问题,为了使用户平滑升级,Node.js官方给出了它们采用的错误码,可以在查看
NODE_OPTIONS
新增了 stack-trace-limit
属性,用于开发环境下设置堆栈上限,使用方式:NODE_OPTIONS=--stack-trace-limit=100
console.debug
方法,此方法与console.log
表现一致cluster.settings
中允许通过cwd
属性配置目标目录state.ending
属性判断stream是否已调用 end()
方法async_wrap
新增了两个属性值:TCPSERVERWRAP
和 PIPESERVERWRAP
,从而允许我们通过连接种类区分服务器原文发布时间:2018年02月07日
作者:
本文来源: 如需转载请联系原作者