【悄咪咪学Node.js】7.5 os.platform() 篡改 platform 标识与防止

os.platform()

1. 前言

本系列课程对非功能性函数内容安排中,将插入一些在生产过程中可能会用到对应函数的例子。

本节课将会引导大家学习了解:

  • os.platform()process.platform 的使用方法
  • os.platform()process.platform 在生产中的作用

学习完本节课程后,应该具有:

  • 使用 os 模块获取当前系统平台标识,并通过判断,实现不同需求的能力

2. os.platform()

os.platform() 可以获取标识操作系统平台的字符串。 该值在编译时设置。 可能的值有 'aix'、 'darwin'、 'freebsd'、 'linux'、 'openbsd'、 'sunos' 和 'win32'。

复制代码
以下提供一个对应表格。

2.1 对应表格

标识 系统
aix AIX 系统
darwin 苹果 macos
freebsd FreeBSD 系统
linux linux 系统
openbsd openbsd 系统
sunos Solaris 系统或 sunos 内核
win32 Windows 系统(64位系统的标识也是 win32)

2.2 代码例子

我们先来执行下面这段代码:

js 复制代码
// 引入 os 模块
const os = require('os');

// 打印结果
console.log(os.platform());

windows 结果:

shell 复制代码
win32

macos 结果:

shell 复制代码
darwin

Tips:Node.js 有一些原生 API 和 第三方库 API 在不同系统中有不同的表现形式,现在用 os.platform() 区分即可。

2.3 process.platform

Node.js 在运行时,会将系统平台信息写入到 process.platform 参数中。

我们可以用以下语句获取:

js 复制代码
console.log(process.platform);

windows 结果:

shell 复制代码
win32

macos 结果:

shell 复制代码
darwin

2.4 可信度

在这不禁怀疑该值的可信度,试一下修改:(macos 系统为例)

js 复制代码
process.platform = "noneJS_OS";

console.log(process.platform);

结果:

shell 复制代码
darwin

Tips:对 process.platform 修改不会生效,process.platform 值可信。

既然如此,我们试着修改一下 os.platform():(macos 系统为例)

js 复制代码
const os = require('os');

os.platform = function() {
    return "noneJS_OS"
};

console.log(os.platform());

结果:

shell 复制代码
noneJS_OS

Tips:通过重写 os.platform() 函数,能修改这个函数的返回值,使得获取的系统平台 不可信

通过上面的结果可知,在实际情况下,使用 process.platform 更好。

process 参数能被覆盖,所以养成良好的命名习惯,避免使用 Node.js 自身变量名、避免重写 API 十分重要。

3. 生产中的作用

  1. 用法一

    区分不同系统以适配功能,如前文提到的 os.freemem()macos 上表现 异常,现在我们能区分出数据是否可信了:

    js 复制代码
    const os = require('os');
    
    if (os.platform() === 'darwin') {
        console.log('您在使用 macos 系统,空闲内存暂不能估计。');
    } else {
        console.log('空闲内存:', os.freemem());
    }

Tips:可以使用 process.platform 代替 os.platform()

4. 小结

本节课程我们主要学习了 os.platform()、process.platform 及其在生产上的用法

重点如下:

  1. 重点1

    使用 os.platform()process.platform 可以针对不同的系统平台实现不同的需求。

  2. 重点2

    养成良好的命名习惯,避免重写 API,或覆盖参数。

相关推荐
Clown9518 分钟前
Go语言爬虫系列教程 实战项目JS逆向实现CSDN文章导出教程
javascript·爬虫·golang
星空寻流年1 小时前
css3基于伸缩盒模型生成一个小案例
javascript·css·css3
waterHBO2 小时前
直接从图片生成 html
前端·javascript·html
Growthofnotes2 小时前
VSCode中Node.js 使用教程
ide·vscode·node.js
王佳斌2 小时前
node.js文件系统(fs) - 创建文件、打开文件、写入数据、追加数据、读取数据、创建目录、删除目录
node.js
EndingCoder2 小时前
JavaScript 时间转换:从 HH:mm:ss 到十进制小时及反向转换
javascript
互联网搬砖老肖3 小时前
React组件(一):生命周期
前端·javascript·react.js
HCl+NaOH=NaCl+H_2O3 小时前
Quasar组件 Carousel走马灯
javascript·vue.js·ecmascript
℘团子এ3 小时前
vue3中预览Excel文件
前端·javascript
shmily麻瓜小菜鸡4 小时前
在 Angular 中, `if...else if...else`
前端·javascript·angular.js