node全局变量 node定时器 系统自带的模块 http服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | for ( var k of Object.keys(global)){console.log(k)} global clearInterval clearTimeout setInterval setTimeout queueMicrotask clearImmediate setImmediate k undefined > var timer = setTimeout( function (a,b,c){console.log(a,b,c);},1000,1, 'a' ) undefined > 1 a undefined |
setImmediate
设定执行完回调,即这个调用可能是比较消耗时间的,暂时不阻止主进程的执行,等主进程执行完之后再执行。
var timer = setImmediate(function(a, b, c) {
console.log(a, b, c);
}, 1000, 1, 'a');
console.log("hello");
输出:
hello
1000 1 'a'
系统自带的模块
通过process.moduleLoadList
打印的NativeModule
可以查看到相关的模块信息。主要的系统模块包括:
[ 'assert', 'buffer', 'console', 'dns', 'domain', 'events', 'fs', 'module', 'net', 'os', 'path', 'querystring', 'readline', 'repl', 'stream', 'string_decoder', 'timers', 'tty', 'url', 'util', 'vm' ]
其中最能代表 node.js 的最初思想的是 net, 'events'这两个模块。
module 及其变量
在 node.js 里通常一个文件就可以是一个模块 并且每个模块都包含下面几个模块变量:
- __dirname 获取当前文件所在目录
- __filename 获取当前文件名
- exports 到 module.exports 的引用
- module 当前模块
- require() 模块加载的函数
1 | 1.用于创建 TCP/IPC 服务器 */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | const net = require( "net" ); /* 自带模块,不需要下载依赖 */ /* net.Server 类 1.用于创建 TCP/IPC 服务器 */ const server = net.createServer((socket) => { }); /* 2.可能响应的事件: a. connection:外部 socket 接入事件 b. listening: 侦听事件 c. close: 关闭事件 d. error: 错误事件 */ server.on( "connection" , (socket) => { // 无id console.log( "socket id = " + socket.id); console.log( "一个新的socket链接" ); /* 获取远程地址与端口 .remoteAddress .remotePort 取消 TCP 缓存数据(Nagle 算法) .setNoDelay 发送数据 .write */ <br> }); /* listening 事件 比 listen 的回调优先级高。*/ server.on( "listening" , () => { console.log( "监听服务" ); console.log(arguments); }); /* error 事件 */ server.on( 'error' , (err) => { // handle errors here throw err; }); /* close 事件 会在所有连接关闭后发出 */ server.on( 'close' , (err) => { console.log( "服务关闭" ); }); server.listen(process.env.NODE_PORT || 8888); |
http服务器
1 2 3 4 5 | const http = require( 'http' ); const server = http.createServer((req, res) => { res.end( "Hello world!\n" ); }); server.listen(4333); |
访问测试
$> curl http://127.0.0.1:4333
Hello world!
最简单的 HTTP 服务器完成!
下面命令可以看到协议的一些交互信息:
curl -v http://127.0.0.1:4333
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | C:\Users\dell>curl http: //127.0.0.1:4333 Hello world! C:\Users\dell>curl -v http: //127.0.0.1:4333 * Rebuilt URL to: http: //127.0.0.1:4333/ * Trying 127.0.0.1... * TCP_NODELAY set * Connected to 127.0.0.1 (127.0.0.1) port 4333 ( #0) > GET / HTTP/1.1 > Host: 127.0.0.1:4333 > User-Agent: curl/7.55.1 > Accept: */* > < HTTP/1.1 200 OK < Date: Mon, 28 Dec 2020 07:40:32 GMT < Connection: keep-alive < Content-Length: 13 < Hello world! * Connection #0 to host 127.0.0.1 left intact C:\Users\dell> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?