在windows上用nodejs搭建静态文件服务器的简单方法_node.js

在windows上用nodejs搭建一个静态文件服务器,即使你一点基础没有也能学会nodejs静态文件服务器的搭建,本文介绍的非常详细,很适合零基础入门的朋友学习。

首先安装nodejs:

•新建一个node文件夹

•下载node.exe到该文件夹

•下载npm然后解压到该文件夹

•现在node文件夹是这样的

•把该目录加入到path环境变量

•在命令行执行

node -v
npm -v

如果得到了版本号则表示nodejs安装完成

•在命令行中执行

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

以后安装nodejs模块 都会从淘宝的npm镜像中下载

•如果想要发布自己的模块到npm要先把npm的registry切换回来

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

接下来搭建静态文件服务器

•创建一个文件夹server,一个文件夹root,server内是服务器的js代码,root是根目录

•server文件夹里面创建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));//请求的实际路径
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()) {//路径对应的是一个文件
resFile(response, realPath);
} else if (stat.isDirectory()) {//路径对应的是一个文件夹
var defaultIndexPath = path.resolve(realPath, 'index.html');
return getPromise(function (resolve, reject) {
fs.exists(defaultIndexPath, function (isExists) {
if (isExists) {//如果该文件夹内有index.html
resolve(true);
} else {//该文件夹内没有index.html 则 显示该文件夹的内容列表
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文件夹内按住shift按钮,鼠标右键点击文件夹内空白区域,点击在此处打开命令窗口,执行命令

node index.js

以上所述是小编给大家介绍的在windows上用nodejs搭建静态文件服务器的简单方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索nodejs静态文件服务器、nodejs搭建文件服务器、nodejs搭建静态服务器、nodejs 文件服务器、node 静态文件服务器,以便于您获取更多的相关知识。

时间: 2024-11-03 18:07:21

在windows上用nodejs搭建静态文件服务器的简单方法_node.js的相关文章

Nodejs异步回调的优雅处理方法_node.js

前言 Nodejs最大的亮点就在于事件驱动, 非阻塞I/O 模型,这使得Nodejs具有很强的并发处理能力,非常适合编写网络应用.在Nodejs中大部分的I/O操作几乎都是异步的,也就是我们处理I/O的操作结果基本上都需要在回调函数中处理,比如下面的这个读取文件内容的函数: 复制代码 代码如下: fs.readFile('/etc/passwd', function (err, data) {   if (err) throw err;   console.log(data); }); 那,我们

在Windows上访问Linux下的Samba服务器的方法

  首先先记录下在linux客户端怎么用命令访问windows或者linux的共享文件夹 第一步 代码如下: smbclient -L //192.168.100.5 -U wujie (smbclient是命令 -L是列出服务器有哪些共享文件 -U后面跟着的是用户名) 第二步 输入密码后会看到服务器共享的文件夹,然后用命令 smbclient //192.168.100.5/资源共享 -U wujie 进入服务器,输入密码后会看到如下(我登陆的是windows的共享文件) 代码如下: Pass

nodejs教程之环境安装及运行_node.js

让nodeJS跑起来 第一步当然是安装nodeJS环境了,现在windows安装nodeJS比较快了,直接下载即可: http://www.nodejs.org/download/ 这里根据需要下载,下载完成后直接下一步下一步即可,完了我们就具有nodeJS环境了 第二步,为了方便我们后面操作,我们直接在D盘见了一个文件夹blog 然后打开windows命令行工具,进入d盘,输入: 复制代码 代码如下: express -e blog 然后里面可能有依赖包,我们需要进入blog目录安装(安装的配

Python和Django在Windows上的环境搭建

作为一个.NET程序员,真心不喜欢Python以及PHP这种松散的语法.有人说,程序员应该多学几门语言,本想学习Java,无奈感觉Java的语法太啰嗦了.很多人都推荐Python,说它的语法简洁,执行效率高.趁这两天空闲,开始学习Python. 先从搭建环境开始.作为一个Python初学者来说,一个趁手的编译器是很重要的,本想用VS来开发Python,但是感觉实际开发中没有几家公司会用VS来开发Python,没办法就换成了MyEclipse. 一.首先下载和安装Myeclipse就略过了. 二.

iPhone手机上搭建nodejs服务器步骤方法_node.js

一.为在ios上面运行,编译jxcore 复制代码 代码如下: $ mkdir ~/jxcore  $ cd ~/jxcore  $ git clone https://github.com/jxcore/jxcore.git  复制代码 代码如下: $ cd ~/jxcore/jxcore  $ ./build_scripts/ios-compile.sh  如果出现import which的module not found问题, 那就通过下面语句安装python的which 复制代码 代码如

Windows 系统下安装和部署Egret的开发环境_node.js

需要安装的软件如下: Node.js TypeScript TypeScript代码编辑器 HTTP服务器(可选) Chrome(可选) Egret 这篇文档中,我们主要介绍在Windows环境中安装Egret.其安装步骤如下. 1.安装Node.js 1.1下载Node.js Node.js的安装方法非常简单,我们可以访问 Node.js官网,然后进点击页面中的INSTALL按钮,可直接下载Node.js的msi安装文件包. 本教程撰写时,Node.js版本为0.10.29,如果你的版本高于此

在Node.js中使用HTTP上传文件的方法_node.js

开发环境我们将使用 Visual Studio Express 2013 for Web 作为开发环境, 不过它还不能被用来做 Node.js 开发.为此我们需要安装 Node.js Tools for Visual Studio.  装好后 Visual Studio Express 2013 for Web 就会转变成一个 Node.js IDE 环境,提供创建这个应用所需要的所有东西..而基于这里提供的指导,我们需要:     下载安装 Node.js  Windows 版,选择适用你系统

nodejs的10个性能优化技巧_node.js

下面是我们使用Node.js时遵循的10个性能规则: 1. 避免使用同步代码 在设计上,Node.js是单线程的.为了能让一个单线程处理许多并发的请求,你可以永远不要让线程等待阻塞,同步或长时间运行的操作.Node.js的一个显著特征是:它从上到下的设计和实现都是为了实现异步.这让它非常适合用于事件型程序. 不幸的是,还是有可能会发生同步/阻塞的调用.例如,许多文件系统操作同时拥有同步和异步的版本,比如writeFile和writeFileSync.即使你用代码来控制同步方法,但还是有可能不注意

Nodejs爬虫进阶教程之异步并发控制_node.js

之前写了个现在看来很不完美的小爬虫,很多地方没有处理好,比如说在知乎点开一个问题的时候,它的所有回答并不是全部加载好了的,当你拉到回答的尾部时,点击加载更多,回答才会再加载一部分,所以说如果直接发送一个问题的请求链接,取得的页面是不完整的.还有就是我们通过发送链接下载图片的时候,是一张一张来下的,如果图片数量太多的话,真的是下到你睡完觉它还在下,而且我们用nodejs写的爬虫,却竟然没有用到nodejs最牛逼的异步并发的特性,太浪费了啊. 思路 这次的的爬虫是上次那个的升级版,不过呢,上次那个虽