文件系统
异步和同步操作:
var fs = require("fs");
// 异步读取
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("异步读取: " + data.toString());
});
// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());
console.log("程序执行完毕。");
打开文件:
fs.open(path, flags[, mode], callback)
参数使用说明如下:
- path - 文件的路径。
- flags - 文件打开的行为。具体值详见下文。
- mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
- callback - 回调函数,带有两个参数如:callback(err, fd)。
获取文件信息:(注意:这个是获取文件的信息,不是获取文件内容)
fs.stat(path, callback)
参数使用说明如下:
- path - 文件路径。
- callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。
var fs=require("fs");
console.log("准备打开文件");
fs.stat('input.txt',function(err,stats){
if(err){
return console.error(err);
}
console.log(stats);
console.log("读取文件信息成功!");
//检测文件类型
console.log("是否为文件?"+stats.isFile());
console.log("是否为目录?"+stats.isDirectory());
});
结果如下:
写入文件:
fs.writeFile(file, data[, options], callback)
参数使用说明如下:
- file - 文件名或文件描述符。
- data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
- options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’
- callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
读取文件:
fs.read(fd, buffer, offset, length, position, callback)
参数使用说明如下:
- fd - 通过 fs.open() 方法返回的文件描述符。
- buffer - 数据写入的缓冲区。
- offset - 缓冲区写入的写入偏移量。
- length - 要从文件中读取的字节数。
- position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
- callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead
表示读取的字节数,buffer 为缓冲区对象。
删除文件
fs.unlink(path, callback)
fs除了上述的还有很多方法,比如对目录的操作,这里就不细列了
Web模块和GET,POST请求
使用var http = require('http');
来创建一个server服务器,
http.createServer(function(req,res){})
使用Node.js获取post数据
var http = require('http');
var querystring = require('querystring');
var postHTML =
'<html><head><meta charset="utf-8"><title>菜鸟教程 Node.js 实例</title></head>' +
'<body>' +
'<form method="post">' +
'网站名: <input name="name"><br>' +
'网站 URL: <input name="url"><br>' +
'<input type="submit">' +
'</form>' +
'</body></html>';
http.createServer(function (req, res) {
var body = "";
// 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
req.on('data', function (chunk) {
body += chunk;
});
// 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
req.on('end', function () {
// 解析参数
body = querystring.parse(body);
// 设置响应头部信息及编码
res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});
if(body.name && body.url) { // 输出提交的数据
res.write("网站名:" + body.name);
res.write("<br>");
res.write("网站 URL:" + body.url);
} else { // 输出表单
res.write(postHTML);
}
res.end();
});
}).listen(3000);
使用Node.js创建web服务器
var http=require('http');
var fs=require('fs');
var url=require('url');
//创建服务器
http.createServer(function(req,res){
//解析请求,包括文件名
var pathname=url.parse(req.url).pathname;
//输出请求的文件名
console.log("Request for"+pathname+"received.");
//从文件系统中读取请求的文件内容
fs.readFile(pathname.substr(1),function(err,data){
if(err){
console.log(err);
//HTTP状态码:404:NOT FOUND
//Content Type:text/plain
res.writeHead(404,{'Content-Type':'text/html'});
}else{
//HTTP状态码;200:OK
//Content Type:text/plain
res.writeHead(200,{'Content-Type':'text/html'});
//响应文件内容
res.write(data.toString());
}
//发送响应数据
res.end();
});
}).listen(80);
//控制台会输出以下信息
console.log('Server running at http://localhost/');
使用 Node 创建 Web 客户端:
var http = require('http');
// 用于请求的选项
var options = {
host: 'localhost',
port: '8080',
path: '/index.html'
};
// 处理响应的回调函数
var callback = function(response){
// 不断更新数据
var body = '';
response.on('data', function(data) {
body += data;
});
response.on('end', function() {
// 数据接收完成
console.log(body);
});
}
// 向服务端发送请求
var req = http.request(options, callback);
req.end();