基于Node.js搭建静态服务器

  作者:zhanhailiang 日期:2014-11-23

原理:

  1. 通过解析请求url来解析到相应文件路径;
  2. 判断文件是否存在;
  3. 若存在,则读取文件内容输出;

实现:

var path = require(‘path‘),
    fs = require(‘fs‘);
 
require(‘http‘).createServer(function(req, res) {
    // 解析文件路径,默认以当前目录为根目录查找文件
    // 这里可以通过配置root值来做为相对根目录查找文件
    var file = path.normalize(‘.‘ + req.url);
    console.log(‘Trying to serve‘, file);
    function reportError(err) {
        console.log(err);
        res.writeHead(500);
        res.end(‘Internal Server Error‘);
    }
 
    // 判断文件是否存在
    path.exists(file, function(exists) {
        // 文件存在,则读取文件流,输出
        if (exists) {
            fs.stat(file, function(err, stat) {
                var rs;
                if (err) {
                    return reportError(err);
                }
 
                if (stat.isDirectory()) {
                    res.writeHead(403); res.end(‘Forbidden‘);
                } else {
                    rs = fs.createReadStream(file);
                    rs.on(‘error‘, reportError);
                    res.writeHead(200);
                    rs.pipe(res);
                }
            });
        // 404
        } else {
            res.writeHead(404);
            res.end(‘Not found‘);
        }
    });
}).listen(4000);

完整源码:https://github.com/billfeller/professional-nodejs/tree/master/chapter11

参考:<Professional
Node.js> Chapter11 Building HTTP Servers

最后:

以上只是一个实现静态服务器的示例,生产应用仍然首选Nginx。

时间: 2024-12-26 15:26:23

基于Node.js搭建静态服务器的相关文章

基于Node.js的文件下载服务器

首先表示,并不是我客户端玩腻歪了要玩跨界:另外,代码不是我写的,而是我找的. 直接上代码地址,不想看唠叨的就直接下载代码就ok了. https://github.com/andygrn/Node.js-File-Server 下载代码后,直接把server.js拖到node.exe图标上就可以运行了,在浏览器中访问http://127.0.0.1:80/可以直接连接下载服务器了. 1.为什么要关注下载服务器(文件服务器)? 因为我要写个多线程断点续传的下载库,当然要有一个服务器进行测试.用Apa

基于Node.js搭建TCP聊天服务器

作者:zhanhailiang 日期:2014-11-23 原理: 服务器端维持所有的客户端连接列表: 当服务器收到某个客户端的消息时,将其广播给其它的客户端连接: 当某个客户端连接退出时,将其从客户端连接列表中剔除: 实现: var net = require('net'); var server = net.createServer(); var sockets = [];   // accept connection server.on('connection', function(soc

node.js搭建简单服务器,用于前端测试websocket链接方法和性能测试

WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询 (Polling)和Comet技术,Comet又可细分为两种实现方式,一种是长轮询机制,一种称为流技术,这两种方式实际上是对轮询技术的改进,这些 方案带来很明显的缺点,需要由浏览器对服务器发出HTTP request,大量消耗服务器带宽和资源.面对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并实现真正意义上的

Node.js搭建WEB服务器

前言 这几天为了熟悉vue.js框架,还有webpack的使用,就准备搭建一个发布和浏览markdwon的简单WEB应用.原本是想着用bash脚本和busybox的httpd来作为后台服务,但是bash脚本解析和生成JSON非常不方便,而用Java语言写又觉得部署不方便,所以就想到了正在用到的Node.js,于是就有了这篇博文.(文末有本文代码的github地址) 简单例子 首先,从搭建最简单的Hello world开始,建立以下目录.文件和内容. 建立项目及运行 project web-ser

学习 node.js 搭建web服务器

开始 学习使用 node.js 首先完成搭建一个 web服务器.myweb.js 1 var http = require('http'); 2 var url = require('url'); 3 var hostname = '127.0.0.1'; 4 var port = 3000; 5 var bodystr = ""; 6 var server = http.createServer(function(req, res){ 7 res.statusCode = 200;

node.js搭建HTTP服务器

新建server.js var http = require("http"); http.createServer(function(request, response) { response.writeHead(200, { "Content-Type": "text/plain" }); response.write("Hello World"); response.end(); }).listen(8888); node

Node.js 搭建HTTP服务器,提供文件下载

直接上代码,这是第一版,可以判断扩展名 var http = require('http'); var express = require('express'); var fs=require("fs"); var path=require("path"); var mime = require('mime'); var app = express(); var currDir = 'F:\\Users\\djyk\\74dj.mp3'; app.get('*',

基于Node.js和express的日志服务器

首先,这篇文章学习的意义大于实际价值.如果按我的本意,直接在游戏中加入友盟,信息更全,而且非常简单.不过总是有很多人会凭着自己过时或者错误的经验去说别的东西多么不好,自己的东西多么好.好在,我自认为学习能力非常强,解决问题的能力也非常强.真让我做一个服务器+前端,也是在兴趣之中和能力之内. 一.Node.js简介 原本javascript纯粹是一个前端语言,干的基本上是让网页更丰富更炫的事情.不过Node.js出现后,javacript成为了前后端通吃的语言.比如网易的pomelo就是基于Nod

基于Node.js的文件服务器(使用Q重构代码)

之前写过一篇文章,简单介绍了一个基于Node.js的静态文件服务器.那时还只是个人兴趣.最近又有了关于服务器的新的需求,我就想花点时间,好好研究一下.所以把之前的代码拿出来重构了一番,整体代码变得干净很多. 首先最新Node.js是支持generator的,所谓generator,就是javascript中的协程(半协程),不过功能稍弱,仅仅是为了解决js中凶名赫赫的callback hell而诞生的.这里我并没有使用generator,而是使用promise(饭要一口一口吃,先弄明白promi