简单了解node
node的设计模式
- node 由 V8 引擎封装的
- node 使 javascrip t可以运行在浏览器之外
- node 没有document 对象,没有bom dom window 等对象
- 报错 document is not defined
node的工作方式
- 异步 一个进程可以服务多个请求
安装node
- node -v 查看node的是否安装
- 一般安装稳定版本
- 一直点击下一步完成
第一个node程序
- 运行node 在终端上,或者命令运行
- 运行方式:
- 在文件自身的位置上运行 可以在本地地址栏输入cmd
- 在命令行里打开文件 使用cd命令切换
- 运行是node 空格加 js文件
node node文件.js
全局对象
- node 没有 window 对象
- node的全局对象是global
node的模块
- 每一个文件就是一个模块
- 模块内的作用域和函数模块外不可访问
- 如果需要使用其他模块的内容需要导出
创建模块,导出模块
- module对象的exports属性
var url = 'http://myweb.com';
function log(message) {
consloe.log(message);
}
//导出对象
module.exports.url = url
module.exports.log = log
加载模块
- 使用 require 加载模块
- const logger = require(‘./logger.js’)
- logger.log(‘message’)
- 看清楚文件位置
- 可以不加扩展名 node 会自动添加
- 一般定义为常量 避免重新赋值
- 可以导出一个对象或者函数
- module.exports = log 直接赋值
- 直接调用函数 log(‘meaasge’)
模块包裹函数
- node总是将自己包裹在一个函数里
(function(exports,require,module,__filename,__dirname) {
内容
})
注意点:
简写module.exports 为 exports 引用
简写之后就不能重置exports对象了,即使不能给exports对象赋值
路径模块
- 导入内置模块
const path = require('path')
操作系统模块
- 导入模块
const os = require('os')
文件系统模块
const fs = require('fs')
events事件模块
node事件
EventEmitter是一个类 每个单词开头都要大写
const EventEmitter = require ('events')
创建一个对象
const emitter = new EventEmitter()
注册一个监听器 事件发生时被调用的函数
on 和 addListener 方法 on更加常用
on需要两个参数
1. 第一个是事件的名称
1. 第二个是回调函数 ,也就是实时的监听者
emitter.on('messageLogged',function() {
console.log('Listener called')
})
emit()方法是用来发起事件的
emitter.emit('messageLogged')
事件参数
传递事件发生时的数据
emitter.on('messageLogged',(arg) =>{
console.log('Listener called',arg)
})
arg约定俗成 e或者eventArg
emitter.emit('messageLogged',{
id:1,url:'http://'})
监听者可以得到事件的参数
class
如果你想要使用监听器来监测某个事件的发生,需要创建一个扩展来自EventEmitter的类,这个类就具有了EventEmitter的所有功能
http模块
const http = require('http')
const server = http.createServer()
server.on('connection',(socket)=> {
consolr.log('New Connection')
})
server.listen(300