91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js創建Web、TCP服務器

發布時間:2020-09-22 22:52:00 來源:腳本之家 閱讀:155 作者:laozhang 欄目:web開發

使用http模塊創建Web服務器

Web服務器的功能:

接受HTTP請求(GET、POST、DELETE、PUT、PATCH)

處理HTTP請求(自己處理,或請求別的程序處理)

做出響應(返回頁面、文件、各類數據等)

常見的Web服務器架構:

Nginx、Apache:負責接受HTTP請求,確定誰來處理請求,并返回請求的結果

php-fpm / php模塊:處理分配給自己的請求,并將處理結果返回給分配者

常見請求種類:

請求文件:包括靜態文件(網頁、圖片、前端JavaScript文件、css文件...),及由程序處理得到的文件

完成特定的操作:如登錄、獲取特定數據等

Node.js的Web服務器:

不依賴其他特定的Web服務器軟件(如Apache、Nginx、IIS......)

Node.js代碼處理請求的邏輯

Node.js代碼負責Web服務器的各種“配置”

使用Express創建Web服務器

簡單的Express服務器

靜態文件服務

路由

中間件

簡單的Express服務器:

var express = require('express'); 
var app = express(); 
app.get('', function(req, res){ 
<span > </span>res.end('hello\n'); 
<span > </span>}); 
<span > </span>app.listen(18001, function afterListen(){ 
<span > </span>console.log('express running on http://localhost:18001'); 
<span > </span>}); 

靜態文件范圍:

網頁、純文本、圖片、前端JavaScript代碼、CSS樣式表文件、媒體文件、字體文件

使用Express訪問靜態文件

<span ></span>app.use(express.static('./public'));

路由:

將不同的請求,分配給相應的處理函數

區分:路徑、請求方法

三種路由實現方法:

path:比較簡單

Router:比較適合同一個路由下的多個子路由

route:比較適合API

中間件

Connect:Node.js的中間件框架

分層處理

每層實現一個功能

創建TCP服務器

使用net模塊創建TCP服務器

使用telnet連接TCP服務器

使用net創建TCP客戶端

利用node.js搭建簡單web服務器JS代碼部分:

var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
var dir, arg = process.argv[2] || ''; // 命令行第三個參數,用來接收目錄,可為空,相對當前server.js文件的目錄名稱
// 比如使用命令 node server debug,意思就是debug文件夾與server.js文件同級
// 且你想以debug文件夾啟動web服務
 
http.createServer(function (req, res) {
var pathname = __dirname + url.parse(req.url).pathname;
dir = dir ? dir : pathname; // 記住dir(目錄)
pathname = dir ? pathname.replace(dir, dir + arg + '/') : pathname; // 替換文件靜態路徑
if (path.extname(pathname) == "") {
pathname += "/";
}
if (pathname.charAt(pathname.length - 1) == "/") {
pathname += "index.html"; // 入口文件,此處默認index.html
}
 
fs.exists(pathname, function (exists) {
if (exists) {
switch (path.extname(pathname)) {
case ".html":
res.writeHead(200, {"Content-Type": "text/html"});
break;
case ".js":
res.writeHead(200, {"Content-Type": "text/javascript"});
break;
case ".css":
res.writeHead(200, {"Content-Type": "text/css"});
break;
case ".gif":
res.writeHead(200, {"Content-Type": "image/gif"});
break;
case ".jpg":
res.writeHead(200, {"Content-Type": "image/jpeg"});
break;
case ".png":
res.writeHead(200, {"Content-Type": "image/png"});
break;
default:
res.writeHead(200, {"Content-Type": "application/octet-stream"});
} 
// res可以自己添加信息來簡單交互 比如可以修改點header信息 或者修改返回的資源數據
fs.readFile(pathname, function (err, data) {
res.end(data);
});
}
else {
res.writeHead(404, {"Content-Type": "text/html"});
res.end("<h2>404 Not Found</h2>");
}
});
}).listen(8085, "127.0.0.5"); // 服務器端口
console.log("server running at http://127.0.0.5:8085/");

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莲花县| 永州市| 苏尼特右旗| 蒲江县| 西盟| 藁城市| 进贤县| 日照市| 固镇县| 建昌县| 吴忠市| 乌恰县| 宁乡县| 伊春市| 浑源县| 老河口市| 板桥市| 平邑县| 建水县| 宝坻区| 拜泉县| 屏东市| 体育| 龙州县| 赣榆县| 阿拉善盟| 资中县| 盐津县| 定日县| 大新县| 隆安县| 台北市| 武陟县| 德阳市| 全椒县| 化德县| 宕昌县| 沅陵县| 枞阳县| 丰原市| 辉南县|