nodejs的模塊
- require():導(dǎo)入一個模塊
- exports():導(dǎo)出一個模塊
- exports()與module.exports()區(qū)別
所有的exports收集到的屬性和方法平项,都賦值給了 Module.exports撑教。當(dāng)然,這有個前提娇妓,就是Module.exports本身不具備任何屬性和方法。如果,Module.exports已經(jīng)具備一些屬性和方法,那么exports收集來的信息將被忽略阅酪。
代碼1:
a.js
exports.li = function(){
console.log('Hello node!');
};
b.js
var mo = require('./a.js');
mo.li();
代碼2:
a.js
function a(){
console.log('Hello node!');
}
module.exports = a;
b.js
var mo = require('./a.js');
mo();
nodejs文件操作
Node.js 文件系統(tǒng)(fs 模塊)模塊中的方法均有異步和同步版本,例如讀取文件內(nèi)容的函數(shù)有異步的 fs.readFile()
和同步的 fs.readFileSync()
汁针。
異步的方法函數(shù)最后一個參數(shù)為回調(diào)函數(shù)术辐,回調(diào)函數(shù)的第一個參數(shù)包含了錯誤信息(error)。
建議大家是用異步方法施无,比起同步辉词,異步方法性能更高,速度更快猾骡,而且沒有阻塞瑞躺。
- 異步和同步:
input.txt
測試文本hello world!
file.js
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("程序執(zhí)行完畢。");
運(yùn)行結(jié)果:
$ node file.js
同步讀取: 測試文本hello world!
程序執(zhí)行完畢兴想。
異步讀取: 測試文本hello world!
2.打開文件
文件打開方式:
r 以讀取模式打開文件幢哨。如果文件不存在拋出異常。
r+ 以讀寫模式打開文件嫂便。如果文件不存在拋出異常捞镰。
rs 以同步的方式讀取文件。
rs+ 以同步的方式讀取和寫入文件。
w 以寫入模式打開文件岸售,如果文件不存在則創(chuàng)建践樱。
wx 類似 'w',但是如果文件路徑存在凸丸,則文件寫入失敗拷邢。
w+ 以讀寫模式打開文件,如果文件不存在則創(chuàng)建屎慢。
wx+ 類似 'w+'瞭稼, 但是如果文件路徑存在,則文件讀寫失敗腻惠。
a 以追加模式打開文件环肘,如果文件不存在則創(chuàng)建。
ax 類似 'a'妖枚, 但是如果文件路徑存在廷臼,則文件追加失敗苍在。
a+ 以讀取追加模式打開文件绝页,如果文件不存在則創(chuàng)建。
ax+ 類似 'a+'寂恬, 但是如果文件路徑存在续誉,則文件讀取追加失敗。
代碼:
var fs = require('fs');
//異步打開文件
console.log('準(zhǔn)備打開文件');
fs.open('input.txt','r+',function(err,fd){
if(err){
return console.err(err);
}
console.log('文件打開成功');
})
3.獲取文件信息(判斷是否為文件)
var fs = require("fs");
console.log("準(zhǔn)備打開文件初肉!");
fs.stat('input.txt', function (err, stats) {
if (err) {
return console.error(err);
}
console.log(stats);
console.log("讀取文件信息成功酷鸦!");
// 檢測文件類型 console.log("是否為文件(isFile) ? " + stats.isFile());
console.log("是否為目錄(isDirectory) ? " + stats.isDirectory());
});
4.寫入文件
file.js
var fs = require("fs");
console.log("準(zhǔn)備寫入文件");
fs.writeFile('input.txt', '我是通過寫入的文件內(nèi)容!', function(err) {
if (err) {
return console.error(err);
}
console.log("數(shù)據(jù)寫入成功牙咏!");
console.log("--------我是分割線-------------")
console.log("讀取寫入的數(shù)據(jù)臼隔!");
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("異步讀取文件數(shù)據(jù): " + data.toString());
});
});
運(yùn)行結(jié)果
$ node file.js
準(zhǔn)備寫入文件數(shù)據(jù)寫入成功!
--------我是分割線-------------
讀取寫入的數(shù)據(jù)妄壶!
異步讀取文件數(shù)據(jù): 我是通過寫入的文件內(nèi)容
5.讀取文件
var fs = require("fs");
var buf = new Buffer(1024);
console.log("準(zhǔn)備打開已存在的文件摔握!");
fs.open('input.txt', 'r+', function(err, fd) {
if (err) {
return console.error(err);
}
console.log("文件打開成功!");
console.log("準(zhǔn)備讀取文件:");
fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
if (err){
console.log(err);
}
console.log(bytes + " 字節(jié)被讀取");
// 僅輸出讀取的字節(jié)
if(bytes > 0){
console.log(buf.slice(0, bytes).toString());
}
});
});
nodejs的IO鍵盤交互
var readline = require('readline');
const rl = readline.createInterface({
input:process.stdin,
output:process.stdout
});
rl.setPrompt('請和鍵盤交互:');
rl.prompt();
rl.on('line',(line)=>{
var str = line.trim();
console.log('你輸入的是:'+str);
rl.prompt();
}).on('close',()=>{
console.log('exit');
process.exit(0);
});
nodejs的URL判斷渲染模板
var http = rquire('http');
var fs = require('fs');
var urlapi = require('url');
http.createServer(function(request,response){
//解析請求的url
var url = urlapi.parse(request.url);
console.log(url.pathname);
console.log(request.url);
}).listen(3000,'127.0.0.1');
nodejs實(shí)現(xiàn)IO鍵盤交互或?yàn)g覽器輸入交互
nodejs判斷url請求渲染2個簡單的模板
寫3個靜態(tài)的頁面丁寄,首頁氨淌,列表頁,詳情頁