欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在windows上用nodejs搭建靜態(tài)文件服務(wù)器的簡單方法

 更新時間:2016年08月11日 16:39:11   作者:_zwh  
這篇文章主要介紹了在windows上用nodejs搭建靜態(tài)文件服務(wù)器的簡單方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

在windows上用nodejs搭建一個靜態(tài)文件服務(wù)器,即使你一點(diǎn)基礎(chǔ)沒有也能學(xué)會nodejs靜態(tài)文件服務(wù)器的搭建,本文介紹的非常詳細(xì),很適合零基礎(chǔ)入門的朋友學(xué)習(xí)。

首先安裝nodejs:

•新建一個node文件夾

•下載node.exe到該文件夾

•下載npm然后解壓到該文件夾

•現(xiàn)在node文件夾是這樣的

•把該目錄加入到path環(huán)境變量

•在命令行執(zhí)行

node -v
npm -v

如果得到了版本號則表示nodejs安裝完成

•在命令行中執(zhí)行

npm config set registry https://registry.npm.taobao.org

以后安裝nodejs模塊 都會從淘寶的npm鏡像中下載

•如果想要發(fā)布自己的模塊到npm要先把npm的registry切換回來

npm config set registry https://registry.npmjs.org

接下來搭建靜態(tài)文件服務(wù)器

•創(chuàng)建一個文件夾server,一個文件夾root,server內(nèi)是服務(wù)器的js代碼,root是根目錄

•server文件夾里面創(chuàng)建js文件 index.js mime.js server.js

•index.js

var server = require('./server.js');
var rootpath = 'root';
var sv = server.create({
port: '9587',
host: '127.0.0.1',
root: rootpath
}); 
•mime.js 
var types = {
"css": "text/css",
"less": "text/css",
"gif": "image/gif",
"html": "text/html",
"ejs": "text/html",
"ico": "image/x-icon",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"js": "text/javascript",
"json": "application/json",
"pdf": "application/pdf",
"png": "image/png",
"svg": "image/svg+xml",
"swf": "application/x-shockwave-flash",
"tiff": "image/tiff",
"txt": "text/plain",
"wav": "audio/x-wav",
"wma": "audio/x-ms-wma",
"wmv": "video/x-ms-wmv",
"xml": "text/xml",
"default": "text/plain"
};
module.exports = function (ext) {
return types[ext] || 'text/plain'
}

•server.js

var http = require('http');
var path = require('path');
var fs = require('fs');
var url = require("url");
var mime = require('./mime.js');
function getPromise(cbk) {
return (new Promise(cbk));
}
exports.create = function (opts) {
var root = opts.root;
var sv = http.createServer();
function request(request, response) {
var pathname = decodeURIComponent(url.parse(request.url).pathname);
var realPath = path.resolve(path.join(root, pathname));//請求的實(shí)際路徑
getPromise(function (resolve, reject) {
fs.exists(realPath, function (isExists) {//判斷路徑是否存在
isExists ? resolve() : reject();
});
}).catch(function () {
resWrite(response, '404', 'html', '<h1>404</h1>file or dir : <h3>' + pathname + '</h3>not found');
}).then(function () {
return getPromise(function (resolve, reject) {
fs.stat(realPath, function (err, stat) {//判斷路徑是文件還是文件夾
if (err) {
reject(err);
} else {
resolve(stat);
}
})
}).then(function (stat) {
if (stat.isFile()) {//路徑對應(yīng)的是一個文件
resFile(response, realPath);
} else if (stat.isDirectory()) {//路徑對應(yīng)的是一個文件夾
var defaultIndexPath = path.resolve(realPath, 'index.html');
return getPromise(function (resolve, reject) {
fs.exists(defaultIndexPath, function (isExists) {
if (isExists) {//如果該文件夾內(nèi)有index.html
resolve(true);
} else {//該文件夾內(nèi)沒有index.html 則 顯示該文件夾的內(nèi)容列表
resolve(false);
}
})
}).then(function (isExistsIndex) {
if (isExistsIndex) {
resFile(response, defaultIndexPath);
} else {
return getPromise(function (resolve, reject) {
fs.readdir(realPath, function (err, list) {
if (err) {
reject(err);
} else {
resolve(list);
}
})
}).then(function (list) {
var pmlist = list.map(function (item) {
return (new Promise(function (resolve, reject) {
fs.stat(path.resolve(realPath, item), function (err, stat) {
if (err) {
console.error(err);
resolve('');
} else if (stat.isFile()) {
resolve(`<li class="file"><a href="${item}">${item}</a></li>`);
} else if (stat.isDirectory()) {
resolve(`<li class="dir"><a href="${item}/">${item}</a></li>`);
} else {
resolve('');
}
})
}));
});
Promise.all(pmlist).then(function (linkList) {
var links = '<ul>';
links += '<li class="dir"><a href="../">../</a></li>';
links += linkList.join('');
links += '</ul>';
var dirPage = `
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<style>
a{color:blue;text-decoration: none;}
.dir a{color:orange}
</style>
</head>
<body>
${links}
</body>
</html>
`;
resWrite(response, '200', 'html', dirPage);
});
}).catch(function (err) {
resWrite(response, '500', 'default', err.toString());
})
}
})
} else {//既不是文件也不是文件夾
resWrite(response, '404', 'html', '<h1>404</h1>file or dir : <h3>' + pathname + '</h3>not found');
}
}).catch(function (err) {
resWrite(response, '500', 'default', err.toString());
})
})
}
sv.on('request', request);
sv.listen(opts.port, opts.host);
return sv;
};
function resFile(response, realPath) {//輸出一個文件
fs.readFile(realPath, function (err, data) {
if (err) {
resWrite(response, '500', 'default', err.toString());
} else {
var ext = path.extname(realPath).toLocaleLowerCase();
ext = (ext ? ext.slice(1) : 'unknown');
resWrite(response, '200', ext, data);
}
});
}
function resWrite(response, statusCode, mimeKey, data) {
response.writeHead(statusCode, {'Content-Type': mime(mimeKey)});
response.end(data);
}

•在server文件夾內(nèi)按住shift按鈕,鼠標(biāo)右鍵點(diǎn)擊文件夾內(nèi)空白區(qū)域,點(diǎn)擊在此處打開命令窗口,執(zhí)行命令

node index.js

以上所述是小編給大家介紹的在windows上用nodejs搭建靜態(tài)文件服務(wù)器的簡單方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • node的proxy-server使用詳解

    node的proxy-server使用詳解

    本文主要介紹了node的proxy-server使用詳解,主要介紹代理服務(wù)器的API基本使用流程和思路,以及代理服務(wù)器實(shí)例的API基本使用流程和思路,感興趣的可以了解一下
    2023-12-12
  • 快速掌握Node.js環(huán)境的安裝與運(yùn)行方法

    快速掌握Node.js環(huán)境的安裝與運(yùn)行方法

    這篇文章主要介紹了Node.js環(huán)境的安裝與運(yùn)行方法,Node是基于Google Chrome V8引擎的JavaScript解釋器,需要的朋友可以參考下
    2016-02-02
  • node.js中watch機(jī)制詳解

    node.js中watch機(jī)制詳解

    本文給大家?guī)淼氖且黄P(guān)于nodejs中watch機(jī)制的探討,主要探討內(nèi)容是為什么watch不是銀彈,嘗試使用更好的方案來解決這個問題
    2014-11-11
  • window10系統(tǒng)下nvm詳細(xì)安裝步驟以及使用

    window10系統(tǒng)下nvm詳細(xì)安裝步驟以及使用

    nvm可以管理不同版本的node和npm,可以簡單操作node版本的切換、安裝、查看等,下面這篇文章主要給大家介紹了關(guān)于window10系統(tǒng)下nvm詳細(xì)安裝步驟以及使用的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 充分發(fā)揮Node.js程序性能的一些方法介紹

    充分發(fā)揮Node.js程序性能的一些方法介紹

    這篇文章主要介紹了充分發(fā)揮Node.js程序性能的一些方法介紹,Node.js是把JavaScript用于服務(wù)器端的框架,需要的朋友可以參考下
    2015-06-06
  • node.js下LDAP查詢實(shí)例分享

    node.js下LDAP查詢實(shí)例分享

    這篇文章主要介紹了node.js下LDAP查詢實(shí)例分享的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • Node.js fs模塊原理及常見用途

    Node.js fs模塊原理及常見用途

    這篇文章主要介紹了Node.js fs模塊原理及常見用途,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 給nodejs升級的兩種方法

    給nodejs升級的兩種方法

    nodejs是一種流行的服務(wù)器端JavaScript運(yùn)行環(huán)境,它經(jīng)常需要更新以獲取最新的功能和性能優(yōu)化,本文將給大家介紹了給nodejs升級的兩種方法,文中通過代碼示例講解非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 如何用npm命令刪除開發(fā)項目中的node_modules文件夾

    如何用npm命令刪除開發(fā)項目中的node_modules文件夾

    每個項目都會產(chǎn)生一個node_modules,每個node_modules少則幾十兆,多則幾百甚至上千兆,隨著時間的積累,維護(hù)項目的增加,整個項目目錄體積會越來越大,這篇文章主要給大家介紹了關(guān)于如何用npm命令刪除開發(fā)項目中的node_modules文件夾,需要的朋友可以參考下
    2023-12-12
  • node使用Koa2搭建web項目的方法

    node使用Koa2搭建web項目的方法

    本篇文章主要介紹了node使用Koa2搭建web項目的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論