nodejs的基本介绍与用法
一 、node.js的基本介绍
node.js是什么?
- nodejs是为开发高性能而诞生的一种技术
- 简单的说,nodejs是运行在服务端的JavaScript,基于v8引擎运行;
- Node.js 使用了一个事件驱动、非阻塞式 I/O (异步)的模型,速度非常快,性能非常好;
node.js有什么用?
- 它可以创建服务器,构建后端接口
- node可以用来操作系统底层操作硬件等
前端学node.js的好处
- 开发沟通:开发时更容易理解后端实现,降低交流成本
- 后端开发:想写一些自己感兴趣的项目时,可以自己独立完成,即使没有后端支持,且成本特别低。
- 中间层开发:为了进一步的前后端分离,提高性能,使用nodejs做中间层是一个非常好的实践(由于nodejs具有异步io的特点)
- 面试求职:找工作时,有优势,会加分
- 未来发展:Nodejs是称为一个资深的高级前端工程师必然要掌握的
三、Node.js之File模块的使用
文件夹的操作
1. 创建文件夹—fs.mkdir
语法格式:fs.mkdir(path,[ options], callback)
参数使用说明如下:
参数 | 类型 | 说明 |
---|---|---|
path | String | 要创建文件夹的路径 |
[options] | Object | 可选参数:recursive - 是否以递归的方式创建目录,默认为 false。mode - 设置目录权限,默认为 0777。 |
callback | Object | 文件夹创建完成后的回调函数,创建成功是没有参数的,如果创建失败会有个错误对象作为参数 |
实例:
var fs = require("fs");
//创建文件夹test
fs.mkdir("./test", function (err) {
if (err) {
return console.error("创建失败:", err);
}
console.log("文件夹创建成功。");
});
/*
注意:
对于这种创建方式,如果你要创建的路径是: ./t1/t2
但是你又没有t1这个文件夹,那么你就可以加上可选参数recursive:true,如下:
fs.mkdir('./t1/t2', { recursive: true }, function (err) {...});
这样的话,不管你有没有t1这个文件夹,都可以创建t2
*/
2. 读取文件夹—fs.readdir
语法格式:fs.readdir(path, callback)
参数使用说明如下:
参数 | 类型 | 说明 |
---|---|---|
path | String | 要读取文件夹的路径 |
callback | Object | 回调函数带有两个参数err, files, err 为错误信息,files 为 读取文件成功的数组列表。 |
实例:
var fs = require("fs");
//读取当前目录下的test文件夹内容
fs.readdir("./test",function(err, files){
if (err) {
return console.error("文件夹读取失败:",err);
}
files.forEach( function (file){
console.log( file );
});
});
3. 删除文件夹—fs.rmdir
语法格式:fs.rmdir(path, callback)
参数使用说明如下:
参数 | 类型 | 说明 |
---|---|---|
path | String | 要创建文件夹的路径 |
callback | Object | 文件夹删除完成后的回调函数,删除成功是没有参数的,如果删除失败会有个错误对象作为参数err |
实例:
var fs = require("fs");
fs.rmdir("./test",function(err){
if (err) {
return console.error("删除失败:",err);
}
console.log("删除成功");
});
文件的操作
1. 写入(创建)文件----fs.writeFile
语法格式:fs.writeFile(filename,data,callback)
参数使用说明如下:
参数 | 类型 | 说明 |
---|---|---|
filename | String | 要写入的文件名 |
data | String | 要写入文件的内容。 |
callback | fn | 回调函数中有个写入失败的参数err |
实例:
var fs = require("fs");
fs.writeFile("./t1.txt","我是要写入的内容。。。",function(err){
if (err) {
return console.error("文件内容写入失败",err);
}
console.log("文件内容写入成功");
});
2 .读取文件----fs.readFile
语法格式:fs.readFile(path,callback )
参数使用说明如下:
参数 | 类型 | 说明 |
---|---|---|
filename | String | 要读取文件的路径 |
callback | Object | 文件读取后的回调函数;有两个参数 err和data |
var fs = require("fs");
fs.readFile("./t1.txt",function(err,data){
if (err) {
return console.error("读取失败:",err);
}
console.log(data.toString()); //显示内容时需要使用toString把内容转换为字符串进行显示
});
3. 向文件中追加内容—fs.appendFile
语法格式:fs.appendFile(path,data,callback )
参数使用说明如下:
参数 | 类型 | 说明 |
---|---|---|
filename | String | 要写入的文件名 |
data | String | 要追加文件的内容。 |
callback | Object | 回调函数中有个写入失败的参数err |
var fs = require("fs");
fs.appendFile("./t1.txt","我是要追加的内容。。。",function(err){
if (err) {
return console.error("文件内容追加失败",err);
}
console.log("文件内容追加成功");
});
4. 删除文件夹----fs.unlinkFile
语法格式:fs.unlinkFile(path,callback )
参数使用说明如下:
参数 | 类型 | 说明 |
---|---|---|
path | String | 要删除文件的路径 |
callback | Object | 删除文件后的回调函数,有个错误参数err |
var fs = require("fs");
fs.unlink("./test/3.doc", function (err) {
if (err) {
return console.error("文件删除失败:", err);
}
四、Node.js之HTTP模块
HTTP模块是用来构建服务器的核心模块
下面我们来用HTTP模块创建一个最简单的服务器
创建流程:
- 导入http模块
- 使用http模块创建一个服务器
- 给服务器添加请求处理函数fn–>绑定端口
var http = require('http'); //导入一个处理http请求的模块
http.createServer(fn).listen(8888);//使用http模块的createServer方法创建一个http服务器,监听8888端口
function fn (request, response) {
response.writeHead(200, { 'Content-Type': 'text/plain;charset=utf-8' });// 发送 HTTP 头部 , HTTP 状态值: 200 : OK, 内容类型: text/plain
response.end('hello, 我是用node创建的一个服务器');// 发送响应数据 "Hello World"
}
console.log('服务器地址: http://127.0.0.1:8888/');// 提示用户服务器相关信息
五、File+HTTP模块创建静态webserver
创建流程:
- 导入需要的模块 如:fs模块、HTTP模块等
- 使用http模块创建一个服务器
- 获取前端要访问的文件路径
- 读取文件返回到前端
- 监听端口
var http = require("http"), // 引入需要的模块
fs = require("fs"), //引入文件读取模块
cp = require("child_process"), // 可自动打开浏览器模块
url = require("url"); //在引入url模块来处理前端发来的请求
// 使用http模块创建一个服务器
http.createServer(function (req, res) {
var pathname = url.parse(req.url).pathname; // 获取请求路径名
var fileName = ""; //要发送到前端的文件名
if (pathname == "/" || pathname == "") {
fileName = "index.html";
} else {
fileName = pathname.slice(1); //去掉第一个/,然后通过他们去寻找对应的路径
}
console.info(pathname);
//读取文件返回到前端
fs.readFile(fileName, function (err, data) {
if (err) {
res.end("打开" + fileName + "失败!");
return;
}
res.end(data);
});
})
.listen(8889, "127.0.0.1"); // 监听端口
cp.exec("start http://127.0.0.1:8889/"); // 自动打开默认浏览器