node 常用知识

node

零 基础知识

0.0 全局对象

global

0.0.1 常见的全局变量
__filename: 返回当前执行脚本的绝对路径
__dirname: 返回当前执行脚本的所在目录

timer类函数: 执行顺序与事件循环之间关系

process: 与当前进程互动接口

require: 导入模块

module,exports: 导出模块
认识全局变量
// console.log(global);

console.log(__filename); //返回执行文件路径
console.log(__dirname); //返回目录
console.log(this); // 默认情况下 this是空对象,和global 并不同

console.log(this == global);// false


(function () {
    console.log(this == global);// true
    
})()

/* 
默认情况下node 会注入如下模块
require('module')
__filename
__dirname
module
exports
*/



0.1.0 全局对象----process

无需require

    1. 获取进程信息
    1. 执行进程操作, 监听进程
// 1. 资源 cpu 内存

console.log(process.memoryUsage());
console.log(process.cpuUsage());

// 2. 运行环境:运行目录, node 环境 cpu架构, 用户环境 ,系统平台


console.log(process.cwd());
console.log(process.version);
console.log(process.versions);
console.log(process.arch);
console.log(process.env);
// 获取当前环境 * 
console.log(process.env.NODE_ENV);


// 当前平台
// console.log(process.platform);


// 3. 运行状态: 启动参数, PID, 运行时间
console.log(process.argv);
console.log(process.argv0); //arg 0 获取第一个
console.log(process.argv[0]); 
// 所以,我们只要从 process.argv[2] 开始获取就好了

const args = process.argv.slice(2);
console.log(args);// 进程id


console.log(process.pid);// 进程id

console.log(process.uptime());// 从运行开始到现在的时间
setTimeout(()=>{
    console.log(process.uptime());// 从运行开始到现在的时间
},3000)



// node .\4.process.js 1
// node .\4.process.js --a 1 
// var a = args[1]

// 4. 事件监听
// process.on('exit', (code)=>{
//     console.log('exit' + code);
    
// })


// process.on('beforeExit', (code)=>{
//     console.log('beforeExit' + code);

    
// })

// process.exit() // 函数退出

console.log('代码执行完毕');


// 5.标准输入  输出  错误

// console.log = function(data){
//     process.stdout.write('----' + 'data' + '\n')

// };


// console.log(111);

一 事件驱动

// 事件驱动机制
const EventEmitter = require('events')

const myEvent = new EventEmitter();    

myEvent.on('事件1', ()=>{
    console.log('事件1执行了');
})


myEvent.on('事件1', ()=>{
    console.log('事件1-2执行了');
})


myEvent.emit('事件1')

二 单线程

异步IO , 事件驱动,事件循环

// node js 单线程

// 延迟4s后启动服务
function sleepTime(time) {
    const sleep = Date.now() + time * 1000
    while( Date.now() < sleep){}
    return 
}

sleepTime(4)
// 1. http 服务开启

const http = require('http') 

// 2. 发送给客户端的内容
const server = http.createServer((req,res)=>{
    res.end('server starting...')
})

// 3. 开启一个监听端口
server.listen(8080, ()=>{
    console.log('服务已启动');
    
})

三 应用场景

不适用于大量业务,适用于IO密集型应用

# 1. 操作数据库,提供api
# 2. 实时聊天应用程序

3.1 nodejs 实现API服务

https://github.com/dL-hx/ts-node-api

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zGmo3dAp-1651638728674)(node.assets/image-20220504084715851.png)]

3.1.1 框架搭建
npm init -y
npm i typescript -S
tsc --init // 生成ts配置

安装能直接运行ts的脚本工具

npm i ts-node -D

执行ts文件

$ ts-node .\api_server.ts

安装express

npm i express
npm i @types/express -D
3.1.2 数据获取

方式1 : 导入本地json文件

方式2: 后续从数据库中读取

api_server.ts

// 需求: 希望有一个服务,可以根据接口请求的内容返回相应数据
import express from 'express'

import {DataStore} from './data'

const list = DataStore.list

// console.log(DataStore.list)

const app = express()

app.get('/', (req,res)=>{
    // res.end('1111')
    res.json(list)

})


app.listen(8080, () => {
    console.log('服务已经开启了')
  })

data.ts

import list from './list.json'

export class DataStore {
   static list = list
}

list.json

[
    {
      "name": "zce",
      "age": 38
    },
    {
      "name": "syy",
      "age": 18
    }
  ]

package.json

{
  "name": "node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1", 
    "dev": "ts-node api_server"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.1",
    "typescript": "^4.6.4"
  },
  "devDependencies": {
    "@types/express": "^4.17.13"
  }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APiZUTkI-1651638728678)(node.assets/image-20220504122333453.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值