2018.7.20 寫了好幾遍,還是記不住,這里盲打總結(jié)一次
1. 用到的四個(gè)模塊
const http = require('http'); // 創(chuàng)建 服務(wù)用
const fs = require('fs'); // 讀寫文件
const querystring = require('querystring'); // 解析post數(shù)據(jù)
const urllib = require('url'); // 解析get數(shù)據(jù)
2. 創(chuàng)建一個(gè)服務(wù)
const server = http.createServer( (req, res) => {
// req ---> request 前端發(fā)來(lái)請(qǐng)求的對(duì)象
// req.url 請(qǐng)求的路徑
// res ----> response 后端響應(yīng)的對(duì)象
// res.write(data) 向前端相應(yīng)的數(shù)據(jù)
// res.end() 結(jié)束
});
server.listen(8080);
3. 解析GET數(shù)據(jù) 最大3kb
const server = http.createServer( (req, res) => {
// GET
let obj = urllib.parse(req.url, true); // true 可以數(shù)據(jù)解析為對(duì)象
let url = obj.pathname; // 請(qǐng)求的url路徑
let GET = obj.query; // get 數(shù)據(jù)
});
server.listen(8080);
4. 解析POST數(shù)據(jù) 最大可達(dá)1GB
const server = http.createServer( (req, res) => {
// POST ---- 數(shù)據(jù)大的時(shí)候是分段傳輸,所以用事件監(jiān)聽(tīng)
let str = ''; // 用一個(gè)對(duì)象存?zhèn)鬟^(guò)來(lái)的數(shù)據(jù)
// 數(shù)據(jù)傳輸一次執(zhí)行一次
req.on('data', data => {
str += data;
});
// 數(shù)據(jù)傳輸完成執(zhí)行一次
req.on('end', () => {
const POST = str; // 完事后,把數(shù)據(jù)存了
});
});
server.listen(8080);
5. 文件讀取
const server = http.createServer( (req, res) => {
// 這把操作放在了服務(wù)中
let file_name = './www' + url; // url是上面解析的
// fs.readFlie(路徑,(err, data) => { /* data就是讀回來(lái)的數(shù)據(jù) */ })
fs.readFile(file_name,(err, data) => {
if ( err ) {
console.log(‘文件讀取失敗’, err);
res.write('404'); // 向前端寫404;說(shuō)明啥都沒(méi)有請(qǐng)求到
} else {
res.write(data);
}
res.end();
});
} );
server.listen(8080);
6. 文件寫入(這一波操作其實(shí)和上面讀取可以單獨(dú)拿出來(lái)用的)
fs.readFile(路徑, ( err, data ) => {
// data 就是讀到的數(shù)據(jù)
// err 異常時(shí)候報(bào)的錯(cuò)
});
// data 就是要寫入的數(shù)據(jù)
fs.wirteFile(路徑, data , err => {
// 報(bào)的錯(cuò)
});
以上種種都有坑,我沒(méi)填完,慢慢學(xué),慢慢填吧 ~~~~~
7. 總結(jié)(再來(lái)默寫一遍)
const http = require('http');
const fs = require('fs');
const querystring = require('querystring');
const urllib = require('url');
const server = http.createServer((req, res) => {
// get
let obj = urllib.parse(req.url, true);
let url = obj.pathname;
let getData = obj.query;
// post
let str = '';
req.on('data', (err, data) => {
if (err) {
console.error('數(shù)據(jù)異常', err);
} else {
str += data;
}
});
req.on('end',() => {
const postData = querystring.parse(str);
});
// 文件讀取
let file_name = './www' + url;
fs.readFile(file_name, (err, data) => {
if (err) {
console.log('文件讀取錯(cuò)誤', err);
res.write('404');
} else {
res.write(data);
}
res.end();
})
});
server.listen(8080);
敲代碼終究是一種實(shí)踐的藝術(shù),正應(yīng)了實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn) 。 ヾ(°?°)??