1. 怎麼用nodejs搭建web伺服器
使用Nodejs搭建Web伺服器是學習Node.js比較全面的入門教程,因為要完成一個簡單的Web伺服器,你需要學習Nodejs中幾個比較重要的模塊,比如: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協議模塊
var http = require('http');
//url解析模塊
var url = require('url');
//文件系統模塊
var fs = require("fs");
//路徑解析模塊
var path = require("path");
創建服務並在指定的埠監聽:
//創建一個服務
var httpServer = 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對象中包含了請求的所有內容,request是用來設置響應頭以及對客戶端做出響應操作。
processRequest:function(request,response){
var hasExt = true;
var requestUrl = request.url;
var pathName = url.parse(requestUrl).pathname;
//對請求的路徑進行解碼,防止中文亂碼
pathName = decodeURI(pathName);
//如果路徑中沒有擴展名
if(path.extname(pathName) === ''){
//如果不是以/結尾的,加/並作301重定向
if (pathName.charAt(pathName.length-1) != "/"){
pathName += "/";
var redirect = "http://"+request.headers.host + pathName;
response.writeHead(301, {
location:redirect
});
response.end();
}
//添加默認的訪問頁面,但這個頁面不一定存在,後面會處理
pathName += "index.html";
hasExt = false; //標記默認頁面是程序自動添加的
}
//獲取資源文件的相對路徑
var filePath = path.join("http/webroot",pathName);
//獲取對應文件的文檔類型
var contentType = this.getContentType(filePath);
//如果文件名存在
fs.exists(filePath,function(exists){
if(exists){
response.writeHead(200, {"content-type":contentType});
var stream = 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){
//如果這個文件不是程序自動添加的,直接返回404
response.writeHead(404, {"content-type": "text/html"});
response.end("<h1>404 Not Found</h1>");
}else {
//如果文件是程序自動添加的且不存在,則表示用戶希望訪問的是該目錄下的文件列表
var html = "<head><meta charset='utf-8'></head>";
try{
//用戶訪問目錄
var filedir = filePath.substring(0,filePath.lastIndexOf('\\'));
//獲取用戶訪問路徑下的文件列表
var files = fs.readdirSync(filedir);
//將訪問路徑下的所以文件一一列舉出來,並添加超鏈接,以便用戶進一步訪問
for(var i in files){
var filename = 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
2. 如何用sublime text 3進行node.js開發
習慣了用 Sublime Text開發神器寫代碼,目前在使用Node.js,正好github上有一個 Sublime Text的Node.js的插件,於是就嘗試著配置了一下:
1、下載Nodejs插件,下載地址為:
https://github.com/tanepiper/SublimeText-Nodejs
下載zip壓縮包後解壓,文件名改為Nodejs
2、打開Sublime Text3,點擊菜單「Perferences」 =>「Browse Packages」打開「Packages」文件夾,並將第1部的Nodejs文件夾剪切進來
3、打開文件「Nodejs.sublime-build」,將代碼 "encoding": "cp1252" 改為 "encoding": "utf8" ,將代碼 "cmd": ["taskkill /F /IM node.exe & node", "$file"] 改為 "cmd": ["node", "$file"] ,保存文件
4、打開文件「Nodejs.sublime-settings」,將代碼 "node_command": false改為 "node_command": "D:\\Program Files\\nodejs\\node.exe" ,將代碼 "npm_command": false 改為 "npm_command": "D:\\Program Files\\nodejs\\npm.cmd" ,保存文件
5、編寫一個測試文件test.js,按「ctrl+B"運行代碼
3. sublime安裝nodejs怎樣配環境變數
1) 下載sublime並安裝
2) 下載sublime的nodejs插件,需是集成Nodejs插件到sublime中
3) 解壓zip文件, 並重命名文件夾「Nodejs」
4) 打開,操作"preference" --> "Browse packages", 打開一個目錄,這個目錄是眾多語言IDE插件的存放地。
5) 復制」Nodejs「文件夾到這個目錄。 這樣就可以了嗎? 醬樣子還不行,還要更改配置文件。
6) 打開Nodejs文件夾,找到文件「Nodejs.sublime-build」, 拖拽到sublime,顯示:
{
"cmd": ["node", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.js",
"shell":true,
"encoding": "cp1252",
"windows":
{
"cmd": ["taskkill /F /IM node.exe & node", "$file"]
},
"linux":
{
"cmd": ["killall node; node", "$file"]
}
}
需要更改上面標注的地方, 要更改encoding為GB2312或者utf8,如果不更改此屬性可能導致build nodejs代碼時終端顯示亂碼。
7) 要用sublime打開文件「Nodejs.sublime-settings」 或者 設置「preference」 --》
「package settings」 --》 「Nodejs」 --》「setting-default」 打開文件並 更改成:
{
// save before running commands
"save_first": true,
// if present, use this command instead of plain "node"
// e.g. "/usr/bin/node" or "C:\bin\node.exe"
"node_command": /usr/bin/nodejs,
// Same for NPM command
"npm_command": /usr/bin/npm,
// as 'NODE_PATH' environment variable for node runtime
"node_path": false,
"expert_mode": false,
"ouput_to_new_tab": false
}
4. win7能不能安裝nodejs
本來在這虛擬機下安裝了ubuntu,想在linux下寫nodejs。
遇到了一些問題總是升級不了。又不願意重裝系統。為了不浪費時間,在win7下用吧。
不羅嗦了。說正題
下載nodejs引擎,32bit version或者64bit version
下載最新版的npm zip格式壓縮包:http://nodejs.org/dist/npm/
在硬碟某個位置,如F盤下建立一個文件nodejs,把上面兩個下載的東西都放在這里,npm要解壓。
配置兩個環境變數:一個是PATH上增加node.exe的目錄F:\nodejs,一個是增加環境變數NODE_PATH,值為F:\nodejs\node_moles。 配置路徑:win7環境配置在系統》高級系統設置》高級》環境變數》系統變數中查找PATH,編輯加上F:\nodejs,再加上NODE_PATH變數和值。 5.打開Dos窗口。node -v 看下是否出現版本信息。 6.更新nodejs版本 npm update npm -g
5. 基於webrtc以及nodejs的P2P實時視頻demo
吐槽, 你的分類錯了, 導致不能貼代碼。
github:
priologic/easyrtc
webRTC/webRTC.io
自己開發推薦使用/easyrtc
只是玩玩 對於webRTC.io使用簡單
npm install webrtc.io
Client
<video id="local" autoplay="autoplay"></video>
<video id="remote" autoplay="autoplay"></video>
<script src="/webrtc.io.js"></script>
<script>
// note: make sure hostname available to all connecting clients
// (ie. probably not `localhost`)
rtc.connect('ws://yourserveraddress:8001');
rtc.createStream({"video": true, "audio":false}, function(stream){
// get local stream for manipulation
rtc.attachStream(stream, 'local');
});
rtc.on('add remote stream', function(stream){
// show the remote video
rtc.attachStream(stream, 'remote');
});
// more rtc callbacks are available
</script>
Server
var webRTC = require('webrtc.io').listen(8001);
//then a bunch of callbacks are available
6. vue init webpack 創建項目失敗
不管什麼問題,重新進行正確的安裝,是解決問題的有效方法!(哲學)
下面講的是在Windows 10操作系統環境下的全套操作。
需重新安裝 nodejs(已包含NPM)、CNPM、@vue/cli、@vue/cli-init。
假如nodejs 用的是 node-v12.16.1-win-x64.zip (綠色非安裝包),
假如 nodejs 已經解壓到 "c:\nodejs-v12" 。目錄中應該有node.exe這個文件。另外還有一些批命令:npm.cmd、npx.cmd。
一、將 c:\nodejs-v12 加到DOS搜索路徑:
(最背的情況下,假如你沒有管理員許可權,像本人所在的扣門公司,連程序員都沒有自己電腦的管理員許可權,沒許可權安裝軟體,只能用綠色非安裝版的)
DOS命令(rem # 開頭的行不用輸入) :
rem #----- 在[c:\nodejs-v12] 資源瀏覽器地址欄輸入 cmd, 回車,相當於
rem #----- win+R 鍵,在運行中輸入 cmd,然後跳轉到[c:\nodejs-v12]
C:
CD "c:\nodejs-v12"
SET PATH_TMP=%PATH%
SETX PATH "%CD%;%PATH_TMP%"
rem #---- 顯示PATH環境變數
ECHO %PATH%
PAUSE
EXIT
rem #==== 本節DOS結束。
上面的命令會把系統變數PATH加到個人變數PATH中,不太好。而且變數太多時會出現:
「警告: 正保存的數據被裁斷到 1024 字元。」
建議用DOS命令:rundll32.exe sysdm.cpl,EditEnvironmentVariables 來設置,
上面這個命令打開設置界面,手工設置用戶的環境變數。
再次打開DOS命令窗口,顯示 nodejs 版本:
rem #---- 實際執行的是 node.exe -v:
node -v
rem #====
能顯示 node 版本信息,表示node環境設置成功。
二、安裝CNPM(在國內或本人所在的扣門公司網路下,不容易訪問國外網站,要用國內的鏡像站):
rem #----
CD "c:\nodejs-v12"
npm install -g cnpm --registry=
rem # 去你的BD,上面 registry=後面是一個網址,保存後不見了。
rem # 請手工輸入 [https] 加 [://] 加 [registry.npm.taobao.org]
rem #====
檢查CNPM版本:
rem #----
cnpm -v
rem #====
三、安裝@vue/cli :
rem #----
cnpm install @vue/cli -g
rem #====
注意:雖然說i與install等效,若用這樣的命令:cnpm i @vue/cli -g 安裝,
後面會出現問題,當創建vue-cli項目時(npm init webpack myvueproject)會顯示錯誤:
----
npx: installed 1 in 3.048s
command not found: create-webpack
====
四、安裝 @vue/cli-init :
rem #----
cnpm install -g @vue/cli-init
rem #====
檢查vue版本 (注意參數是大寫的 -V):
rem #----
vue -V
rem #====
若顯示信息表示安裝成功,如:
----
@vue/cli 4.2.3
====
最後補充:若操作不成功,需要新建一個目錄,重新安裝上述內容。
尤其是第三、第四步,若中間過程出現紅色錯誤信息,可能是網路不好造成。
正常情況是不會出錯的。
吐一下槽,操作賣白粉的心,賺著賣白菜的錢。