資源引用
- node.js 是跨平臺的,所以為了不同平臺都可以使用路徑,我們一般用
./表示當(dāng)前路徑 - 圖片以及 html 文件、css 文件都屬于資源,在 node.js 中都需要設(shè)置路徑
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(req,res){
if(req.url == 'fang'){
fs.readFile('./test/1.xixi.html',function(err,data){
res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
res.end(data);
})
}else if(req.url == '/yuan'){
fs.readFile('./test/1.haha.html',function(res,data){
res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
res.end(data);
})
}else if(req.url == './0.jpg'){
fs.readFile('./test/0.jpg',function(err,data){
res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
res.end(data);
})
//這里設(shè)置的 url 必須與引用 css 文件的 href 一致
//<link rel="stylesheet" href="bbb.css">
}else if(req.url == '/bbb.css'){
fs.readFile('./test/aaa.css',function (err,data) {
/*設(shè)置響應(yīng)頭
* */
res.writeHead(200,{'Content-Type':'text/css'});
res.end(data);
})
}
});
server.listen(3000,'127.0.0.1');
req.url 的路徑和 html 頁面沒有對應(yīng)關(guān)系,就是說node.js 本身沒有根目錄(web 容器),沒有本身資源
http 包
-
write()與end()一樣都可以是返回數(shù)據(jù),還有render()是返回 html ,但是end()必須有
var http = require('http');
var server = http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
res.write('<h1>i am h1</h1>');
res.write('<h2>i am h2</h2>');
res.write('<h3>i am h1</h3>');
res.write('<h4>i am h1</h4>');
res.write('<h1>i am h1</h1>');
res.end('<h1>i am end</h1>');
})
server.listen(3000,'127.0.0.1');
url 包
- 當(dāng)我們使用 url 這個包的時候,我們可以把 url 中的各個部分獲取到
- url: 本身分了很多部分例如:host,query,port
- 我們可以通過 url包 獲取這部分組成的對象
- 就是可以獲取一個字典
{host:00,query:22,port:23} - 獲取對應(yīng)的 url 進(jìn)行拆分我們使用
url.parse(req.url);這個方法獲取對應(yīng)的對象 -
pathname獲取的是路徑部分,不包括域名、端口、參數(shù)部分(?之前) -
query獲取的是參數(shù)的集合字符串 - 在有的請求中,默認(rèn)有圖標(biāo)請求,但是我們不需要圖標(biāo),所以應(yīng)該把圖標(biāo)請求去掉,圖標(biāo)請求的路徑是
/favicon.ico,如果不需要圖標(biāo)請求,我們只需要進(jìn)來先做判斷,path 是否等于/favicon.ico等于的話直接 return - 關(guān)鍵函數(shù) parse(req.url,true).query
var http = require('http');
var url = require("url");
var server = http.createServer(function(req,res){
var pathname = url.parse(req.url).pathname;
//獲取的是字符串
//如果我們想要獲取的是對象那么需要加一個參數(shù),值為 true
//var queryS = url.parse(req.url).query;
var queryObj = url.parse(req.url,true).query
console.log('pathName:'+pathname);
console.log('age:'+queryObj.age);
res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
res.end();
})
server.listen(3000,'127.0.0.1');
fs 工具包
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(req,res){
//不處理小圖標(biāo)
if(req.url == '/favicon.ico'){
return;
};
//給每一個用戶分配一個隨機(jī)數(shù)
var userid = parseInt(Math.random()*90000)+10000;
console.log('歡迎' + userid);
fs.readFile('./test/2.txt',function(err,data){
//處理錯誤
if(err){
throw err;
};
res.writeHead(200,{'Content-Type':'text/html;chaset=UTF8'});
console.log(userid + 'finished');
res.end(data);
})
})
server.listen(3000,'127.0.0.1');
設(shè)置隨機(jī)數(shù)是為了測試異步操作,所以會出現(xiàn),打印兩個歡迎不同用戶,然后等數(shù)值返回再結(jié)束
- fs 工具包創(chuàng)建文件夾
fs.mkdir('./album/aaa');
res.end();
- 檢測一個目錄是否是文件夾
// 第一個參數(shù)表示目錄的路徑
//第二個參數(shù)表示回調(diào)
fs.stat('./album/bbb',function(err,data){
//這個函數(shù)返回值是一個布爾類型,真為是文件夾
console.log(data.isDirectory());
})
正確的檢測一個目錄下的所有文件夾
- 用閉包(內(nèi)部有遞歸調(diào)用),防止指針丟失
- 關(guān)鍵函數(shù)
stat檢測,files.isDirectory()是否為文件夾
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(req,res){
var filePaths = [];
fs.readdir('./album',function(err,files){
//應(yīng)用閉包遍歷所有東西
(function iterator(i){
//最上面判斷什么時候結(jié)束循環(huán)
if(i == files.length){
console.log(filePaths);
return
};
var fileName = files[i];
fs.stat('./album/'+fileName,function(err,stats){
if(stats.isDirectory()){
filePaths.push(fileName);
}
//每次檢測完畢讓i +1
iterator(i + 1);
})
})(0)
});
res.end();
});
server.listen(3000,'127.0.0.1');
環(huán)境變量
一般是指在操作系統(tǒng)中用來指定操作系統(tǒng)運行環(huán)境的一些參數(shù)