既然每个文件中的变量互不影响,那么如果我们需要使用到某个文件内部的变量时又该如何获取呢?其实require()方法除了解析执行文件模块之外还能返回文件模块自带的exports对象,该对象默认为空{}。
所以我们只需要在文件模块中将需要到处的值传入exports对象中即可:
执行:
6、响应内容的类型Content-Type上文中我们响应的中文可能在浏览器中显示是乱码,这是因为Node.js默认的响应类型是utf-8,而浏览器不知道,如果浏览器默认编码不是utf-8就会产生乱码。
response对象在响应的时候可以设置相关参数,比如响应头,响应内容的类型,而编码方式的信息就由Content-Type来设置。
示例:
var http = require('http'); var server = http.createServer(); server.listen(8888); //服务器request事件:请求时触发 server.on('request',function(request,response){ var url = request.url; var str = '<h1>如果你看得清我,说明我没有乱码!</h1>' if(url == '/plain'){ response.setHeader('Content-Type','text/plain;charset=utf-8');//返回普通文本 }else if(url == '/html'){ response.setHeader('Content-Type','text/html;charset=utf-8');//返回html文本 }else{ str = 'please use url /plain or /html and get the response!' } response.end(str); }); console.log("webServer running at localhost://88888"); 7、fs核心文件fs全称File System,用于操作文件,基本的两个功能为为读文件和写文件。
7.1使用fs读文件:readFile() //使用require方法加载fs模块 var fs = require('fs'); fs.readFile('hello.js',function(error,data){ if(error){ console.log('文件读取失败!'); return; } console.log(data.toString()); });使用fs的readFile()方法,第一个参数为文件地址,第二个参数为回调函数。
回调函数有两个参数,error和data,当文件读取成功时,error返回null,data返回文件的二进制数据;当文件读取失败时,error返回包含错误信息的对象,data返回undefined。
使用data.toString()方法可以讲二进制数据转化为utf-8编码字符串。
7.2使用fs写文件:writeFile() var fs = require('fs'); fs.writeFile('hello.txt','大噶好,I\'m 渣渣辉',function(error){ if(!error){ console.log("文件写入成功!"); }else{ console.log("文件写入失败!"); } });使用fs.writeFile()方法写入文件。第一个参数为文件地址及文件名,第二个参数为文件的文本信息,可以是字符串,也可以是二进制数据,第三个参数为回调函数。
7.3案例:利用fs文件的读写操作实现文件复制逻辑很简单,将读取的文件数据写入新的文件中即可
var fs = require('fs'); fs.readFile('jinx.jpeg',function(error,data){ if(error){ console.log('文件读取失败!'); }else{ //将读取的数据写入新的文件中 fs.writeFile('jinx(copy).jpeg',data,function(error){ if(!error){ console.log("文件写入成功!"); }else{ console.log("文件写入失败!"); } }); } }); 8、案例:使用Node加载index.html并实现简单页面跳转由于文件过多这里不再展示,假设这是一个本地项目,
我们希望使用Node.js来搭建服务器,并在服务器上运行我们的项目。
大家服务器很简单,关键点在于我们需要根据请求路劲来加载相应的资源文件,这些上面的案例都能实现。类似这样:
我们根据request.url使用fs核心模块来加载文件,并设置相应的Content-Type在浏览器中正确裁入文件类型。
openfile()是我自定义的一个方法。
可以发现,这种加载资源的方式并不明智,我们每发起一次资源请求,例如一张图片,我们就需要配置依次资源路径,这是很繁琐且易错的。但目前为止上文所涉及的知识只能这样解决。所以需要继续升入,出门左转。