導航:首頁 > 編程語言 > nodejs搭靜態

nodejs搭靜態

發布時間:2023-03-04 18:15:24

Ⅰ nodejs搭建web伺服器就是這么簡單!

Node.js 是一個基於 Chrome V8 引擎的 javaScript 運行環境。 Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。Node.js 的包管理器 npm,是全球最大的開源庫生態系統。(nodejs官網上的介紹),正如官網上介紹的那樣,nodejs確實很牛!怎麼個牛法?看看下面的代碼就知道了。

//引入http模塊

var http = require("http");

//設置主機名

var hostName = 飗.0.0.1'

//設置埠

var port = 8080;

//創建服務

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

res.setHeader('Content-Type','text/plain');

res.end("hello nodejs");

});

server.listen(port,hostName,function(){

console.log(`伺服器運行在http://${hostName}:${port}`);

});

短短幾行代碼就把一個簡單的web伺服器搭建完成了,為了驗證效果,我們在瀏覽器請求,結果如下

運行成功!

到此為止,一個web伺服器就建立成功了! 沒錯就是這么簡單,然後我們就可以寫個html界面愉快的玩耍了,哈哈哈!果斷的寫了一個html頁面來請求一下我們的web伺服器。

代碼簡單,點擊p獲取數據並將伺服器返回的數據展示。好了,我們運行一下demo.html文件,我擦來!居然出現了……

很明顯,通過jquery請求不到數據,這是因為跨域請求的原因。我們的web伺服器並不支持跨域請求,所以報錯了。解決方式:在伺服器的響應頭文件里加上如下代碼:

再次重啟伺服器,運行demo.html,顯示結果很是令人欣喜!

通常請求伺服器都會拼接參數的,最常用的就是get請求,post請求。很明顯,我們現在的代碼還不能支持。express框架很好的封裝了nodejs的http模塊,使我們用起來非常的簡單。

引入express :$ cnpm install express –save

使用方式變化不大,通過express()方法開啟服務,然後在通過get方法來設置匹配參數的路由,通過在回調函數的req中可以獲取請求參數和地址。post請求也是類似,不過有不同的是,post請求在獲取參數的時候要引入body-parser 中間件,用於處理 JSON, Raw, Text 和 URL 編碼的數據。

運行結果:

完整的get以及post請求就是以上了。下一篇文章會結果fs文件模塊介紹http是如何返迴文件的,敬請期待!!

學習從來不是一個人的事情,要有個相互監督的夥伴,想要學習或交流前端問題的小夥伴可以私信「學習」小明加群獲取2019web前端最新入門資料,一起學習,一起成長!

Ⅱ nodejs 靜態伺服器和http伺服器有什麼區別

參考cnodejs.org上面的靜態伺服器例子,寫了下面的一個nodejs靜態伺服器例子,裡麵包含cache,壓縮,貼代碼如下

/**
* 靜態文件伺服器測試例子
* User: xuwm
* Date: 13-5-17
* Time: 上午8:38
* To change this template use File | Settings | File Templates.
*/
var port=3333;
var http = require("http");
var url = require("url");
var fs = require("fs");
var path = require("path");
var mime = require("./mime").types;
var config = require("./config");
var zlib = require("zlib");
//創建http服務端
var server=http.createServer(function(request,response){
var obj= url.parse(request.url);
response.setHeader("Server","Node/V8");
console.log(obj);
var pathname=obj.pathname;
if(pathname.slice(-1)==="/"){
pathname=pathname+config.Welcome.file; //默認取當前默認下的index.html
}
var realPath = path.join("assets", path.normalize(pathname.replace(/\.\./g, "")));
console.log(realPath) ;
var pathHandle=function(realPath){
//用fs.stat方法獲取文件
fs.stat(realPath,function(err,stats){
if(err){
response.writeHead(404,"not found",{'Content-Type':'text/plain'});
response.write("the request "+realPath+" is not found");
response.end();
}else{
if(stats.isDirectory()){
}else{
var ext = path.extname(realPath);
ext = ext ? ext.slice(1) : 'unknown';
var contentType = mime[ext] || "text/plain";
response.setHeader("Content-Type", contentType);

var lastModified = stats.mtime.toUTCString();
var ifModifiedSince = "If-Modified-Since".toLowerCase();
response.setHeader("Last-Modified", lastModified);

if (ext.match(config.Expires.fileMatch)) {
var expires = new Date();
expires.setTime(expires.getTime() + config.Expires.maxAge * 1000);
response.setHeader("Expires", expires.toUTCString());
response.setHeader("Cache-Control", "max-age=" + config.Expires.maxAge);
}

if (request.headers[ifModifiedSince] && lastModified == request.headers[ifModifiedSince]) {
console.log("從瀏覽器cache里取")
response.writeHead(304, "Not Modified");
response.end();
} else {
var raw = fs.createReadStream(realPath);
var acceptEncoding = request.headers['accept-encoding'] || "";
var matched = ext.match(config.Compress.match);

if (matched && acceptEncoding.match(/\bgzip\b/)) {
response.writeHead(200, "Ok", {'Content-Encoding': 'gzip'});
raw.pipe(zlib.createGzip()).pipe(response);
} else if (matched && acceptEncoding.match(/\bdeflate\b/)) {
response.writeHead(200, "Ok", {'Content-Encoding': 'deflate'});
raw.pipe(zlib.createDeflate()).pipe(response);
} else {
response.writeHead(200, "Ok");
raw.pipe(response);
}
}
}
}
});

}
pathHandle(realPath);
});
server.listen(port);
console.log("http server run in port:"+port);

首先需要在JS文件里創建一個assets的文件夾,裡面放入你要瀏覽的靜態文件,比如,index.html,demo.js等。
運行方式為:在命令行里切換到上面的JS的文件目錄,然後輸入 node JS文件名

Ⅲ 如何用nodejs搭建web伺服器

使用Node.js搭建Web伺服器是學習Node.js比較全面的入門教程,因為實現Web伺服器需要用到幾個比較重要的模塊:http模塊、文件系統、url解析模塊、路徑解析模塊、以及301重定向技術等,下面我們就一起來學習如何搭建一個簡單的Web伺服器。

作為一個Web伺服器應具備以下幾個功能:

1、能顯示以.html/.htm結尾的Web頁面

2、能直接打開以.js/.css/.json/.text結尾的文件內容

3、顯示圖片資源

4、自動下載以.apk/.docx/.zip結尾的文件

5、形如http://xxx.com/a/b/ , 則查找b目錄下是否有index.html,如果有就顯示,如果沒有就列出該目錄下的所有文件及文件夾,並可以進一步訪問。

6、形如http://xxx.com/a/b, 則作301重定向到http://xxx.com/a/b/ , 這樣可以解決內部資源引用錯位的問題。

引入需要用到的幾個模塊:


//http協議模塊varhttp = require('http');//url解析模塊varurl = require('url');//文件系統模塊varfs = require("fs");//路徑解析模塊varpath = require("path");

創建服務並在指定的埠監聽:


//創建一個服務varhttpServer = http.createServer(this.processRequest.bind(this));//在指定的埠監聽服務httpServer.listen(port,function(){console.log("[HttpServer][Start]","runing at http://"+ip+":"+port+"/");console.timeEnd("[HttpServer][Start]");});

在創建服務的時候需要傳遞一個匿名函數processRequest 對請求進行處理,processRequest接收2個參數,分別是request和response, request對象中包含了請求的所有內容,response是用來設置響應頭以及對客戶端做出響應操作。


processRequest:function(request,response){varhasExt =true;varrequestUrl = request.url;varpathName = url.parse(requestUrl).pathname;//對請求的路徑進行解碼,防止中文亂碼pathName = decodeURI(pathName);//如果路徑中沒有擴展名if(path.extname(pathName) ===''){//如果不是以/結尾的,加/並作301重定向if(pathName.charAt(pathName.length-1) !="/"){pathName +="/";varredirect ="http://"+request.headers.host + pathName;response.writeHead(301, {location:redirect});response.end();return;}//添加默認的訪問頁面,但這個頁面不一定存在,後面會處理pathName +="index.html";hasExt =false;//標記默認頁面是程序自動添加的}//獲取資源文件的相對路徑varfilePath = path.join("http/webroot",pathName);//獲取對應文件的文檔類型varcontentType =this.getContentType(filePath);//如果文件名存在fs.exists(filePath,function(exists){if(exists){response.writeHead(200, {"content-type":contentType});varstream = fs.createReadStream(filePath,{flags:"r",encoding:null});stream.on("error", function() {response.writeHead(500,{"content-type":"text/html"});response.end("<h1>500 Server Error</h1>");});//返迴文件內容stream.pipe(response);}else{//文件名不存在的情況if(hasExt){//如果這個文件不是程序自動添加的,直接返回404response.writeHead(404, {"content-type":"text/html"});response.end("<h1>404 Not Found</h1>");}else{//如果文件是程序自動添加的且不存在,則表示用戶希望訪問的是該目錄下的文件列表varhtml ="<head><meta charset='utf-8'></head>";try{//用戶訪問目錄varfiledir = filePath.substring(0,filePath.lastIndexOf('\'));//獲取用戶訪問路徑下的文件列表varfiles = fs.readdirSync(filedir);//將訪問路徑下的所以文件一一列舉出來,並添加超鏈接,以便用戶進一步訪問for(variinfiles){varfilename = files[i];html +="<div><a href='"+filename+"'>"+filename+"</a></div>";}}catch(e){html +="<h1>您訪問的目錄不存在</h1>"}response.writeHead(200, {"content-type":"text/html"});response.end(html);}}});}

請求處理函數中有幾個重點需要說一下:

對於路徑中有中文的,瀏覽器會自動進行編碼(英文不變,中文會變),因此在接收到地址後,需要對地址進行解碼,否則最後得到的路徑和真實路徑不相符,

當訪問路徑不是以具體的文件結尾,並且不是以/結尾,則需要通過重定向加上/,表示當前目錄,否則當前路徑下的靜態資源會找不到

如果訪問路徑是目錄,則列出該目錄下所有文件及文件夾,並可以點擊訪問,為了讓中文目錄能正常顯示,則還要在header中設置charset=utf-8

核心代碼就這么多,大概140行左右,完整的代碼已上傳到github:https://github.com/git-onepixel/Node,

如果要運行demo,打開cmd切換到根目錄,運行node start 即可。

Ⅳ 求助nodejs+express怎麼實現動態頁面靜態化

模板 + 數據 —> 靜態html文件
不知道你用的什麼模板引擎,像ejs,jade,nunjucks,swig等等所有的模板引擎其實最後專吐出的東西都是編譯完屬成的,而你需要的其實是把這些保存成文件而已

以nunjucks為例:

var tpl = 'index.tpl';
var data = getData(); // some where
var content = nunjucks.render(tpl, data);
fs.writeFileSync('index.html', content);
上面生成的index.html就是你要的靜態文件了

Ⅳ 如何使用nodejs搭建開發環境

1.安裝NodeJS

1.編譯環境
源代碼編譯器,通常 Unix/linux平台都自帶了C++的編譯器(GCC/G++)。如果沒有,請通過當前發行版的軟體包安裝工具安裝make,g++這些編譯工具。
Debian/Ubuntu下的工具是apt-get
RedHat/centOS下通過yum命令
Mac OS X下你可能需要安裝xcode來獲得編譯器

2.網路加密
其次,如果你計劃在Node.js中啟用網路加密,OpenSSL的加密庫也是必須的。該加密庫是libssl-dev,可以通過apt-get install libssl-dev等命令安裝。

3.手動編譯
wget http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gz
tar zxvf node-v0.6.1.tar.gz
cd node-v0.10.26
./configure
上面幾行命令是通過wget命令下載最新版本的代碼,並解壓之。./configure命令將會檢查環境是否符合Nodejs的編譯需要。
make
make install

2.安裝NPM

1.NPM的全稱是Node Package Manager, 是NodeJs的第三方安裝庫。
curl http://npmjs.org/install.sh | sh
curl http://npmjs.org/install.sh是通過curl命令獲取這個安裝shell腳本,按後通過管道符| 將獲取的腳本交由sh命令來執行。

2.更改第三方庫
npm install underscore
[email protected] ./node_moles/underscore
由於一些特殊的網路環境,直接通過npm install命令安裝第三方庫的時候,經常會出現卡死的狀態。幸運的是國內CNode社區的@fire9 同學利用空餘時間搭建了一個鏡像的NPM資源庫,伺服器架設在日本,可以繞過某些不必要的網路問題。你可以通過以下這條命令來安裝第三方庫:
npm --registry "http://npm.hacknodejs.com/

如果你想將它設為默認的資源庫,運行下面這條命令即可:
npm config set registry "http://npm.hacknodejs.com/ "

通過npm安裝包。安裝好之後會自動被安裝到 /usr/local/bin 目錄下,而相依的函式庫也會自動安裝到 /usr/local/lib/node 目錄下,實在是非常方便。

3.安裝NodeJS調試環境

1.用npm命令安裝全局模式的 node-inspector組件
sudo npm install -g node-inspector

2.更改埠
修改 node-inspector/lib/config.js的埠
』web-port』: {
desc: 『Port to host the inspector』,
convert: conversions.stringToInt,
defaultValue: 6868
},

3.使用
node-inspector啟動一個調試工具
在chrome瀏覽器中輸入http://127.0.0.1:6868/debug?port=5858打開chrome的調試模式

使用node debug調試nodeJS項目
node --debug-brk=5858 read.js

可以在chrome中查看到調試信息

4.使用Sublime構建NodeJS

設置Sublime的Builder->>
Tools ->> Build System ->> New Build System
將如下代碼寫入
{
「cmd」: ["/usr/local/bin/node", 「$file」],
「file_regex」: 「^[ ]File "(…?)」, line ([0-9]*)",
「selector」: 「source.javascript」
}
保存為NodeJs.sublime-build文件
如此可以直接使用Com+B來使用nodejs運行程序

Ⅵ 如何在伺服器上搭建nodejs

先確認下系統環境合不合要求

Python -V(確認python版本大於2.6)

訪問http://nodejs.org/download/下載需要的Node.js版本(wget
http://nodejs.org/dist/v0.10.26/node-v0.10.29.tar.gz )

解壓 tar zxvf node-v0.10.26-linux-x64.tar.gz

進入目錄 cd node-v0.10.26-linux-x64

./configure --prefix=/home/work/setups/node-v0.10.26

make

sudo make install

添加到系統環境 echo "export PATH=$PATH:/home/work/setups/node-v0.10.26/bin">>
~/.bash_profile

. ~/.bash_profile執行該文件更新$PATH變數
###安裝Express
sudo npm install express
-gd g參數:把express安裝到NodeJS的lib目錄d參數:同時安裝依賴模塊包

sudo npm install forever -gd

(異常情況:

如果遇到npm 找不到的情況 確認sudo node -v是否找不到 找不到的話:需要added /usr/local/bin to secure_path in /etc/sudoers :

sudo visudo

把 Defaults secure_path =
/sbin:/bin:/usr/sbin:/usr/bin 這行 改為 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin然後:x保存退出

如果遇到

npm ERR! Error: Hostname/IP doesn't match certificate's altnames

執行 npm config set strict-ssl false

如果遇到 npm ERR! registry error parsing json

npm cache clean

執行 npm config set registry http://registry.npmjs.eu/

)
###部署forever
$ npm install -g forever

啟動

NODE_ENV=pro LANG='zh' /usr/local/bin/foreverstart-o
/home/work/log/node_out.log-e /home/work/log/node_err.log /home/work/webroot/index.js

NODE_ENV=pro 環境變數 pro為生產環境(程序中可以指定)

LANG 環境變數 指定默認語言

node_out.log 輸出日誌 注意路徑別抄成我的了

node_err.log 錯誤日誌

index.js 啟動文件

Ⅶ nodejs通過函數名進行靜態方法調用出現類型錯誤,為什麼

在JS里,一切都是對象,所謂的class並不是傳統語言上的定義或者聲明,而是直內接創建出來了(容已分配內存)。
Myfunc是個構造函數(constructor),所有在構造函數中創建的變數和方法都是prototype的。
因此
function Myfunc(){
this.myMethod=function(){
}
}

function Myfunc(){
}
Myfunc.prototype.myMethod=function(){
}
是等效的。
所以調用前必須new一下。
而下面這段是可以的,因為直接給Myfunc對象加了一個方法myMethod。恩只是寫法和用法像靜態而已。
function Myfunc(){
}
Myfunc.myMethod=function(){
}

閱讀全文

與nodejs搭靜態相關的資料

熱點內容
網路鬥地主記牌器怎麼實現的 瀏覽:377
ps鏡像文件製作教程 瀏覽:45
系統分頁文件大小設置多少 瀏覽:447
win10有線無法上網 瀏覽:339
wps無法訪問指定文件 瀏覽:96
iphone4震動壞了 瀏覽:217
安卓隨機數軟體rand 瀏覽:356
CNC編程如何掌握公差 瀏覽:297
linux搭建php環境 瀏覽:514
星形網路怎麼表示有故障 瀏覽:719
dbf文件c語言處理excel 瀏覽:138
金蝶kis支持win10嗎 瀏覽:113
常州採集物聯網大數據平台有哪些 瀏覽:950
win10休眠文件改到d盤 瀏覽:626
如何編程手機app軟體 瀏覽:656
node獲取文件名 瀏覽:367
iphoneios7怎麼設置鈴聲 瀏覽:52
手機qq激活星鑽 瀏覽:302
html中引入js文件路徑 瀏覽:83
0基礎自學編程可以看什麼書 瀏覽:860

友情鏈接