nodejs 配置服務器


  node 是 js 的運行的后台環境,他自身集成了很多模塊,集成的模塊直接 require 就行了;

  npm 第三方平台,他也是為 node 服務的,對於 npm 中的模塊,先 npm install 然后在使用

  node 就是給 js 提供了一個運行環境,其他任何事情都干不了

  1. 創建一個服務器 http 模塊,服務為請求響應,

   listen 用來綁定域名和端口,listen("端口","域名");

   request 客戶端向服務端發送的都在這個對象中

   response 響應

   response.end() 用於結束響應,返回給客戶端東西

  var http=require("http");  // 創建服務器使用的模塊  http

  var fs =require("fs");  // 文件處理模塊

  var app=http.createServer(function(req,res){

    響應頭:  res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});  200 狀態碼  mime 類型(重要) text/html  返回的文件類型,向 css 文件,返回的就是 text/css  這樣瀏覽器才能正常的解析,否則,解析不成功,都是字符串; 

    讀取文件內容: fs.readFile("./static"+文件名,function(err,data){        // 這種寫法 就會把 static 當成 根目錄                                  

       if(err){

         throw err   // 拋出錯誤   

         }

    響應體:   res.end(data)  // data 便是讀取文件的數據,    res.end() // 代表向瀏覽器響應的數據(將讀取的文件返回出去)

    })

  })

  app.listen(8000)  //  listen()  8000 代表 端口,如果是測試的話,我們通過 localhost:8000  便可訪問我們的服務器

  nodejs 扮演了服務器的角色,服務端的功能,響應瀏覽器的請求

  為什么在 node 下引入文件不起作用,在 php 下可以呢?

    php 他在使用的時候都集成了服務器的環境,存在根目錄這個概念

  不同的請求,根據地址來查看實現

    服務器的響應是根據請求的地址,找到對應的數據

  注意:每個服務器,只有一個響應體,也就是說,我只響應一下,然后就不響應了,並不是說,我可以多次響應

  fs 模塊:操作文件的模塊

    其中最常用的 便是 讀取文件 fs.readFile()  要響應給 瀏覽器的話,我們需要設置響應頭,最重要的是 mime 類型,及中文編碼

  url 模塊:用來解析網絡地址,將 string 類型解析成 object 類型

    通過 url.parse("網絡地址",true)  解析 網絡地址,第二個參數:true 代表對請求體進行解析

    pathname  路徑

    query      參數 

  文本 mime 類型  text/plain  

  如果沒有動 服務器的代碼,則服務器不需要重啟,但要是改了服務器的代碼,服務器必須重啟

  服務器:

    請求必須響應,響應沒處理,就有可能導致鏈接失敗  

  小技巧:通過網絡地址欄搜查找的文件的內容,如果沒有,那是服務器問題,如果有,就是前端的問題

  前端的學 nodejs 的悲哀:

    除了業務邏輯我們可以做,剩下的只能用 node 自帶的,或第三方的模塊

  我們想要獲取文件路徑的拓展名,

  path 模塊

    path.extname()  獲取文件路徑的拓展名

  想讓一個目錄是根目錄,那么根目錄在前端的網址上是隱藏的,在后台的上才知道誰是根目錄

  完整案例:   

let http = require("http");
let fs = require("fs");
let url = require("url");
let path = require("path");
http.createServer(function(req, res) {
let obj = url.parse(req.url);
let paths = obj.pathname;
// console.log(paths);
fs.readFile("./static" + paths, function(err, data) {
if (paths != "/favicon.ico") {
// console.log(paths);
let extname = path.extname(paths);
let type = memu(extname);
if (err) {
throw err;
}
res.writeHead(200, {"Content-Type": type+";charset=utf-8"});
res.end(data);
}
})

}).listen(3000);
function memu(exname){
switch(exname){
case ".html":
return "text/html";
break;
case ".css":
return "text/css";
break;
case ".jpg":
return "image/jpg";
break;
case ".png":
return "image/png";
break;
case ".js":
return "text/javascript";
break;
case ".json":
return "text/json";
break;
case ".jpeg":
return "image/jpeg";
break;
case ".gif":
return "image/gif";
break;
case ".rtf":
return "application/rtf ";
break;
default:
return "text/plain";
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM