Node.js 是什么?
- JavaScript 运行时, 运行环境
- 既不是语言,也不是框架,它是一个平台
- 简单来讲,node.js可以解析和执行js代码
Node.js与JavaScript的关系
- node.js中没有BOM、DOM
- 只有EcmaScript 基本的 JavaScript
语言部分,如变量、方法、数据类型、及内置对象 Array Object Date Math - 在 Node中为JavaScript 提供了一些服务器级别的 API,如文件操作的能力,http 服务的能力。
node中 模快分三种
-
具名的文件模块(也叫核心模块)
例如:文件操作的叫做fs模块
http服务构建的就叫http模块
path路径叫做路径模块
os操作系统信息叫做获取信息模块 -
自定义文件模块
-
通过npm现在的第三方模块,例如bootstrap
加载模块
1.都是通过require('文件名')
方法来加载这些模块
var fs=require('fs');//1.1 加载核心模块
var template=require('art-template');//1.2 加载第三方包模块,所有第三方包都是通过npm下载
var b=require('./b.js');//1.3 加载自己的文件模块
2.关于模块加载顺序
①. 优先加载已缓存下来的文件
②. 核心模块
③. 路径形式的文件模块
④. 第三方包模块 node_modules中查找 找不到会跳到上一级目录查找node_modules,依次直到磁盘根目录,还找不到就报错,一个项目有且只有一个node_modules,都会放到当前目录的根目录
3.关于加载文件模块需要注意的
①. ./
不能省略
②. 加载文件模块时,后缀名是可以省略的
③. 不存在第三方模块名与核心模块名一致
核心模块
1.fs
// 1.使用require()加载fs核心模块,即文件操作模块
var fs=require('fs');
读文件
// 2.读取文件readFile('绝对路径',回调函数)
fs.readFile('./data/hello.txt',function(error,data){
// 如果读取失败,error是错误对象 data是undefined
// 如果读取成功,error是null data是数据
console.log(error,data);//null <Buffer e4 bb 8a e5 a9 e5 a4 a9 e6 b0 e4 b8 8d e9 94 99>
// data被解析成二进制,之后被转为十六进制数据
// 可以通过toString()转为字符串
if(error) return console.log('文件读取失败');
console.log(data.toString());
})
写文件
// 写文件writeFile(path: string | number | Buffer | URL, data: any, callback)
fs.writeFile('./data1/hello1.txt','我是通过node.js写入的',function(err){
// 如果写入成功err为null 而当前文件中之前的内容会被删除,只留下写入得内容
// 如果当前路径下没有这个文件会创建一个相应的文件,但不会创建文件夹,其中文件名不能使用特殊字符
console.log(err);
})
2.http
端口
- 端口的作用:通过端口来区分出同一电脑内不同应用或者进程,从而实现一条物理网线(通过分组交换技术-比如internet)同时链接多个程序
Port_(computer_networking) - 端口号是一个 16位的 uint, 所以其范围为 1 to 65535 (对TCP来说, port 0 被保留,不能被使用.
对于UDP来说, source端的端口号是可选的, 为0时表示无端口). - app.listen(3000),进程就被打标,电脑接收到的3000端口的网络消息就会被发送给我们启动的这个进程
//1.加载相关模块
var http = require('http');
//2.创建server服务器
var server = http.createServer();
//3.监听request事件
server.on('request',function(req,resp){
resp.end('hello node.js');
});
//4.第一个参数绑定端口号,第二个参数是一个回调函数,会在 listen 动作成功后执行,我们这里执行了一个命令行输出操作,告诉我们监听动作已完成
server.listen(3000, function () {
console.log('run.')
});
其中可以通过设置Content-Type,来解决解决中文乱码
rep.setHeader('Content-Type','text/html;charset=utf-8');