首页 > 前端 > Nodejs轻松搭建局域网服务器

Nodejs轻松搭建局域网服务器

一、前言

前端开发经常会遇到移动端调试或者其它设备测试的场景,部署到云服务器上实在是太麻烦,如果可以在局域网直接调试就方便多了,Nodejs较为接近前端,选它来搭建局域网服务器便于上手。

2016050301593929

 

二、代码实现

因为只是要测试前端部分,所以实现的功能是静态文件服务器即可。参考了一下这篇文章,试着写了一个简单的静态文件服务器,实现了基本的路由、静态文件读取、MIME类型支持的功能,直接贴代码:

 首先是主程序app.js

var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
var mime = require('./mime');
 
//服务器端口号
var port = 8888;
//服务器路径
var root = './your-path';
//默认访问根目录下的"index.html"
var index = 'index.html';
 
http.createServer(function (request, response) {
 
    var realPath = url.parse(request.url).pathname;
 
    //默认访问根目录下的index.html
    if (realPath.charAt(realPath.length - 1) == "/") {
        realPath += index;
    }
 
    //安全问题,禁止父路径
    realPath = realPath.replace(/\.\./g, '');
    var realPath = root + realPath;
 
    //获取文件的后缀名,为待会的MIME类型提供支持
    var ext = path.extname(realPath);
    ext = ext ? ext.slice(1) : 'unknown';
 
    //先判断访问文件是否存在,并返回对应的HTTP状态码,再读取静态文件
    fs.exists(realPath, function (exists) {
        console.log('path.exists--%s', exists);
        if (!exists) {
            response.writeHead(404, {
                'Content-Type': 'text/plain'
            });
 
            response.write("This request URL " + realPath + " was not found on this server.");
            response.end();
        } else {
            fs.readFile(realPath, "binary", function (err, file) {
                if (err) {
                    response.writeHead(500, {
                        'Content-Type': 'text/plain'
                    });
 
                    response.end(err + '');
                } else {
                    //MIME类型支持
                    var contentType = mime[ext] || "text/plain";
                    response.writeHead(200, {
                        'Content-Type': contentType
                    });
 
                    response.write(file, "binary");
                    response.end();
                }
            });
        }
    });
 
}).listen(port);
 
// 终端打印运行信息
console.log('Server running at port:' + port);

 

然后是支持MIME类型mime.js

var mime = {
    "html": "text/html",
    "ico": "image/x-icon",
    "css": "text/css",
    "gif": "image/gif",
    "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"
};
module.exports = mime;

 

至此代码完成,这个静态文件服务器已经能够支持一些常用访问请求了。

 

运行程序

为了让别的设备能在局域网内访问你的服务器,我们首先要知道你的本机IP。

CMD下输入“ipconfig”,找到“无线局域网适配器 Wi-Fi”:

2016050804490127

这里可以看到路由器给你分配的局域网ip地址为 192.168.1.109,确保你要测试的其它设备与服务器在同一局域网后,在浏览器上输入此IP地址加上在app.js 里面设置的端口号就可以访问了(本例为“192.168.1.109:8888”)。

 

自此局域网服务器搭建完成。

 


本文标题:Nodejs轻松搭建局域网服务器
转载请注明出处,欢迎分享