nodejs:一个异步的事件驱动的JavaScript运行时;
nodejs特性:非阻塞I/O 事件驱动
运行node程序:node 文件名 或者 nodemon 文件名(该方式可监听文件改变)
package.json:当创建一个nodejs项目意味着创建了一个模块,该模块的描述文件被称为package.json;该文件可通过npm init生成。
package.json属性说明:
name-包名 version-包当版本号 description-包当描述 homepage-包当官网url author-包的作者 contributors-包的其他贡献者 dependencies/devDependencies 生产/开发环境依赖包列表,它们将被安装在node_modules目录下 repository-包代码的repo信息,包括type/url main-指定了程序的主入口文件 keywords-关键字
{ "name": "test1", "version": "1.0.0", "description": "nodebao", "main": "1.js", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "cpu-stat": "^2.0.1" } }
使用模块,如os,计算内存占用:
const os = require('os'); const mem = os.freemem() / os.totalmem() * 100; console.log(`内存占用${mem.toFixed(2)}%`)
useModule.js:
// 引用内置模块,不需要install const os = require('os'); const util = require('util'); const mem = os.freemem() / os.totalmem() * 100; console.log(`内存占用${mem.toFixed(2)}%`) // 引用第三方模块需要先install,如npm i cpu-stat -s const cpuStat = require('cpu-stat'); cpuStat.usagePercent((err,percent) => { console.log(`cpu占用:${percent.toFixed(2)}%`) }) const getCpu = util.promisify(cpuStat.usagePercent); getCpu().then(percent => { console.log(`cpu占用:${percent.toFixed(2)}%`) }) const showStat = async () => { const mem = os.freemem() / os.toFixed() * 100; console.log(`内存占用${mem.toFixed(2)}%`) const percent = await getCpu(); console.log(`cpu占用:${percent.toFixed(2)}%`) } // 输出为一个模块 module.exports = { showStat }
index.js:
const {showStat} = require('./2-useModule'); setImmediate(showStat);
文件系统fs:
// 文件系统 const fs = require('fs'); const path = require('path'); // 同步读取文件 文件读取是个二进制的过程 输出buffer 可以进行转换获得我们认得的文本 const data = fs.readFileSync('index.js'); console.log(data.toString(),'ddd') const _dirname = ''; // 异步读取 path.resolve将路径进行解析拼接在一起 path.resolve() 方法将路径或路径片段的序列解析为绝对路径 fs.readFile(path.resolve(_dirname,'index.js'), (err, data) => { if (err) { return console.error(err); } console.log("异步读取: " + data.toString()); });
缓冲器Buffer:
// Buffer 类在全局作用域中,因此无需使用 require('buffer').Buffer // 创建一个长度为 10、且用零填充的 Buffer。 const buf1= Buffer.alloc(10); console.log(buf1,'buf1') // 16进制 返回一个被 string 的值初始化的新的 Buffer 实例 const buf2= Buffer.from('a'); console.log(buf2,'buf2') // <Buffer 61> 十六进制61为a在ascii码中对应的数值 // utf8 const buf3= Buffer.from('中国'); console.log(buf3,'buf3') // 拼接 const buf4 = Buffer.concat([buf2, buf3]); console.log(buf4, 'buf4'); console.log(buf4.toString(), 'buf44');
http服务器,运行该文件并在浏览器中打开localhost:3009
// http服务器 const http = require('http'); const server = http.createServer((req, res) => { res.end('hello d world'); }) server.listen(3009);
// http服务器 const http = require('http'); const fs = require('fs'); const server = http.createServer((req, res) => { const {url, method} = req; if(url==='/' && method==='GET'){ // 读取文件数据并作为返回数据 fs.readFile('index.html', (err,data) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/html'); res.end(data); }) }else if(url==='/users' && method === 'GET'){ res.writeHead(200, {'Content-Type':'application/json'}); res.end(JSON.stringify({name:'abc'})) } // res.end('hello d world'); }) server.listen(3009);
PS :感谢&参考 官方资料及菜鸟教程