Node.js:函数、路由、全局对象

Node.js函数

在JavaScript中,一个函数可以作为另一个函数的参数,可以先定义一个函数,然后进行传递,也可以在传参的地方直接定义

js 复制代码
function sayhello(){
    console.log("hello");
}
function run(hello, value){
    hello();
    console.log(value);
}
run(sayhello, 1);

hello

1


匿名函数

不需要定义函数的名字,直接进行调用即可

js 复制代码
function execute(somefunc, value){
    somefunc(value);
}
execute(function(value){
    console.log(value);
},"Hello!");

实例:通过函数的匿名传递让http服务工作

js 复制代码
var http = require("http");
http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);

这种方法类似于go语言的handler

Node.js路由

我们需要的所有的数据都被包含于request对象中,该对象作为onRequest()回调函数的第一个参数传递,但是为了解析这些数据,我们需要包含额外的node.js模块,分别为url和querystring模块

js 复制代码
var http = require("http");
var url = require("url");
function start(){
    function onRequest(request, response){
        var pathname = url.parse(request.url).pathname;
        console.log("Request for "+pathname+" received.");
        response.writeHead(200, {"Content-Type":"text/plain"});
        response.write("HW");
        response.end();
    }
    http.createServer(onRequest).listen(8888);
    console.log("Server launch!");
}
exports.start = start;

全局对象

JavaScript中有一个特殊的对象,称为全局对象(Global Object),它及其所有的属性都可以在程序的任何地方进行访问,即全局变量

浏览器中通常window是全局对象,而node.js中的全局对象是global,所有全局变量都是global对象的属性

我们可以直接访问到global的属性

全局对象与全局变量

global的最根本的作用是作为全局变量的宿主

满足下列变量的为全局变量

  • 在最外层定义
  • 全局对象的属性
  • 隐式定义,直接赋值的变量

当你定义一个全局变量时,这个变量同时也会成为全局对象的属性,最好不要使用 var 定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码的耦合风险。


__filename

__filename------当前正在执行的脚本名,将输出绝对路径,且和命令行参数所指定的文件名不一定相同。

js 复制代码
console.log(__filename);
__dirname

__dirname------当前执行的脚本所在的目录

js 复制代码
console.log(__dirname);
setTimeout(cb, ms)

全局函数,在指定的事件结束之后指定函数cb,但是仅仅执行一遍函数,返回一个代表计时器的句柄值

js 复制代码
function sayHello(){
    console.log("Hello!");
}
setTimeout(sayHello, 2000);
clearTimeout(t)

停止作用在全局的计时器,参数t是全局计时器的一个句柄

js 复制代码
function sayHello(){
    console.log("Hello!");
}
var t = setTimeout(sayHello, 2000);
clearTimeout(t);
setInterval(cb,ms)

和setTimeout类似,但是会循环调用某一个函数,直到被清除

js 复制代码
function printHello(){
  console.log("Hello!");
}
let interval = globalThis.setInterval(printHello, 3000);
function clear(){
  globalThis.clearInterval(interval);
}
global.setTimeout(clear, 10000);
console

console是一个标准的控制台输出,原来是IE的内部调试工具,后来成为实际标准

  • console.log()打印字符串
  • console.info()返回消息型数据,除了chrome,其他会返回蓝色的惊叹号
  • console.error()输出错误消息,返回红叉
  • console.warn()警告消息,黄色惊叹号
  • console.dir()对一个对象进行检查,并以易于阅读和打印的格式进行显示
  • console.time()输出事件表示计时开始
  • console.timeEnd()结束时间表示计时结束
  • console.trace()当前执行的代码在堆栈中的调用路径,这个测试函数运行很有帮助,只要给想测试的函数里面加入 console.trace 就行了。
  • console.assert()用于判断某个表达式或变量是否为真,接收两个参数,第一个参数是表达式,第二个参数是字符串。只有当第一个参数为false,才会输出第二个参数,否则不会有任何结果。\
progress

是一个全局变量,global的属性

描述当前的node.js的进程状态的对象,提供了一个与操作系统的简单接口

  • exit
    当进程准备退出时候触发
  • beforeExit
    当node清空时间循环,并且没有任何其他的安排的时候这个事件会被触发
  • uncaughtExpection
    当一个异常冒泡回到事件循环,触发这个事件。如果给异常添加了监视器,默认的操作(打印堆栈跟踪信息并退出)就不会发生。
  • Signal 事件
    当进程接收到信号时就触发。信号列表详见标准的 POSIX 信号名,如 SIGINT、SIGUSR1 等。
js 复制代码
process.on('exit', function(code) {
  // 以下代码永远不会执行
  setTimeout(function() {
    console.log("该代码不会执行");
  }, 0);
 
  console.log('退出码为:', code);
});
console.log("程序执行结束");

process提供了很多的有用属性,比如stdout、执行参数argv等

详见:https://www.runoob.com/nodejs/nodejs-global-object.html

相关推荐
laoli_coding19 分钟前
如何配置HTTPS站点访问的免费SSL域名证书
网络协议·https·node.js·ssl
To_OC20 分钟前
手写 AI 编程 Agent 的命令执行工具:我被 child_process 坑出来的实战经验
后端·node.js·agent
大家的林语冰8 小时前
👍 Rust 为 Node 插上翅膀,反超 Bun 和 pnpm,一体化工具我也有!
前端·javascript·node.js
Kel10 小时前
Node.js 本质:从全脉络视角理解运行时原理
javascript·设计模式·node.js
ShiXZ21313 小时前
指令集-NPM 常用指令速查手册
前端·npm·node.js
孟陬1 天前
高质量全方位的 AI 工具 sse-stuntman — Mock SSE 接口
前端·node.js·openai
掰头战士1 天前
你本地的LLM有时会胡乱使用tools?不妨用MCP规范LLM工具调用!
node.js·llm·全栈
触底反弹1 天前
🧠 LangChain Agent 入门:为什么直接调大模型 API 远远不够?
人工智能·node.js·llm
书中枫叶1 天前
从「上次几点喂奶」到全栈小程序:我做了个喂宝助手
mongodb·微信小程序·node.js
Asize1 天前
Node path 与 fs 模块:从回调地狱到 async await 的异步进化
javascript·node.js