nodejs(1)----- 創(chuàng)建一個(gè)服務(wù)

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) 。 ヾ(°?°)??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容