简介
node.js是浏览器的js引擎。
浏览器中有一个js引擎用来解析js代码,只能解析js代码中的ECMAScript,dom和bom的解析依赖的是浏览器本身。
将这个js引擎单独拿出来,就是node了。
要让这个引擎运行起来,有人将他做成了一个软件,安装在电脑上,js代码就不用依赖浏览器运行了,在电脑的命令行也能运行js代码。
为什么要这么做?因为这样的话,js就能写后台了。
中文网:
盘符: # 进入某个盘符 cd 目录 # 进入某个目录 cd .. # 回到上一级目录 dir # 查看当前文件夹中的文件和文件夹 tree # 查看当前文件夹中的所有文件和文件夹包括子文件夹及其文件,树状结构 cls # 清屏 ipconfig # 查看当前电脑的网管信息 systeminfo # 查看当前电脑的配置信息 md 文件夹名 # 新建文件夹 make dir directory rd 文件夹名 # 删除文件夹 xcopy 文件夹 新文件夹名 # 复制文件夹,并起新的名字 type nul> 文件名 # 新建文件 copy 文件名 新文件名 # 复制文件,并起新的名字 echo 内容 > 文件名 # 给文件中写入内容 move 文件路径 新的路径 # 将文件移动到新的路径 ren 文件名 新的文件名 # 将文件重命名 del 文件名 # 删除一个文件
在vscode中,自带了命令行,可以直接在编辑器中执行命令:
ctrl+` # 打开编辑器的命令行
或者: 在文件上右击 “用命令打开”
导入导出
每个人开发的功能都是一个单独的文件,要将多个文件组合在一起,需要将这多个文件导出,然后在一个最终的项目文件中导入。
导出:
每个文件都有一个对象:module。这个对象中有一个属性叫做exports,值也是一个对象,默认是一个空对象。当前文件默认导出的就是这个exports对象,导出的内容都写在这个对象中。
module = { exports:{ name:"张三" } }
这个对象默认是存在的,所以不用重新赋值,直接添加内容即可。例:
module.exports.name = '张三';
module.exports.age = 20;
将另一个文件中导出的内容接收起来。
var res = require(要导入的文件); // 返回值就是文件导出的内容:module.exports对象
在node中,模块分三种:
-
内置模块,node系统自带的一些文件模块
-
自定义模块,自己的一些文件
-
第三方模块,雷锋写好的,下载来使用
fs模块
这个模块主要用来操作文件:读取、写入文件。
node系统自带的,直接引入进来使用。
const fs = require("fs");
写入文件
异步写入
fs.writeFile(被写入的文件,写入的内容,写入完成后执行的回调函数); // 这个操作是异步的
-
文件存在则写入,文件不存在则创建文件写入。
-
文件中没内容就直接写,有内容会覆盖写入。
例:
const fs = require("fs"); fs.writeFile("./test.txt","hello node",function(){ console.log("写入完成!"); }); console.log(123);
异步写入结果 |
---|
同步写入
fs.writeFileSync(被写入的文件,写入的内容); // 这个操作是同步的
同步写入结果 |
---|
读取文件
异步读取
fs.readFile(要读取的文件,[读取文件编码方式],读取成功后执行的回调函数);
-
可选项参数是读取文件使用的编码方式,可以写utf-8
-
回调函数中需要两个参数,参数1为错误对象,读取成功为undefined,读取失败为错误信息;参数2为读取的结果。如果没有编码方式,读取的是一个buffer,使用16进制来描述二进制数据,需要转为字符串查看。
例:
var fs = require("fs"); /*fs.readFile("./a.txt",(err,data)=>{ if(err){ console.log("读取失败,错误为:",err); return } console.log("读取成功,数据为:",data.toString()); });*/ fs.readFile("./a.txt","utf-8",(err,data)=>{ if(err){ console.log("读取失败,错误为:",err); return } console.log("读取成功,数据为:",data); }); console.log(123);
异步读取文件结果 |
---|
同步读取
fs.readFileSync(要读取的文件[,读取文件的编码]);
例:
var fs = require("fs"); /* var data = fs.readFileSync("./a.txt"); console.log("读取成功,数据为:",data); */ var data = fs.readFileSync("./a.txt","utf-8"); console.log("读取成功,数据为:",data); console.log(123);
同步读取文件结果 |
---|
http模块
node做后端,没有现成的服务器,需要使用http这个模块。
引入模块:
const http = require("http");
利用这个模块做服务器:
// 创建服务器,返回这个服务的名称 http.createServer(function(){ // 处理客户端的请求 console.log("有请求"); }); // 监听端口 http.listen(9988);
启动文件,服务器就启动了,一直是阻塞状态,等待客户端的请求进来:
启动服务器结果 |
---|
http.createServer(function(request,response){ // 处理客户端的请求 console.log(request); response.end("你的请求成功"); });
请求信息 |
---|
response是服务器给客户端响应的信息,可以自己设置,常用的属性和方法:
res.write(data): 给浏览器发送请求体,可以调用多次,从而提供连续的请求体 res.end(); 通知服务器,所有响应头和响应主体都已被发送,即服务器将其视为已完成。 res.end(data); 结束请求,并且响应一段内容,相当于res.write(data) + res.end() res.statusCode: 响应的的状态码 200 404 500 res.statusMessage: 响应的状态信息, OK Not Found ,会根据statusCode自动设置。不能赋值中文 res.setHeader(name, value); 设置响应头信息, 比如content-type res.writeHead(statusCode, statusMessage, options); 设置响应头,同时可以设置状态码和状态信息
注意:必须先设置状态码,再设置响应头,最后设置响应主体,顺序不能乱。
例:
const http = require("http"); const server = http.createServer(); server.on("request",function(req,res){ // 设置状态行和响应头 // 语法:res.writeHead(状态码,状态文本,{响应头}); res.writeHead(404,'ccc',{'content-type':'text/html'}); res.end("ok"); }); server.listen(9988,function(){ console.log("服务器启动成功"); });