文件系统

异步和同步操作:

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();