nodejs简易server环境及简易接口路由 写在一起 (2)

6 篇文章 0 订阅
6 篇文章 0 订阅



上篇: nodejs简易server环境及简易接口路由 写在一起


再来个带inclue功能的,nodejs简易server环境及简易接口路由 写在一起 (2)


grunt:搞定一些自动完成

     [  autoprefixercontrib-cssmin, contrib-jshint, contrib-less, contrib-uglify, contrib-watch,ejsbrowser-sync, node-dev ]

node server.js:后台交互

server.js :


var PORT = 1337, DIR = '.'; //用于存放html的目录

var http = require('http'), url = require('url'), fs = require('fs'), path = require('path'), ejs = require('ejs');
ejs.delimiter = '$$';
var mine = {
    "css": "text/css", "gif": "image/gif", "html": "text/html", "ico": "image/x-icon", "xml": "text/xml",
    "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"
};

var server = http.createServer(function (req, res) {
    var pathname = url.parse(req.url).pathname;
    var realPath = path.join(DIR, pathname);
    //console.log(realPath);

    var ext = path.extname(realPath);
    ext = ext ? ext.slice(1) : 'unknown';
    fs.exists(realPath, function (exists) {
        if (!exists) {
            var data={};
            if(req.url == "/common/user/login"){
                data={
                    rlt_code:'HH0000',
                    rlt_msg:'成功',
                    data:{
                        access_token:'token_zjf',
                        open_id:'open_id123'
                    }
                };
                res.writeHead(200, { "Content-Type": "application/json;charset=UTF-8" });
                res.end(JSON.stringify(data));
            }else if(req.url == "/common/user/register"){
                data={
                    rlt_code:'HH0000',
                    rlt_msg:'成功'
                };
                res.writeHead(200, { "Content-Type": "application/json;charset=UTF-8" });
                res.end(JSON.stringify(data));
            }


            else{
                res.writeHead(404, { "Content-Type": "text/plain" });
                res.end("404 error! File not found.!");
            }
            /*res.write("This request URL " + pathname + " was not found on this server.");
            res.end();*/
        } else {
            if(ext=='html'){

                fs.readFile(realPath, "utf-8", function (err, file) {

                    /*
                    * ---
                    * ---<*- /layout/footer.ejs |||| {"active":4}  -*>
                    * ---<*- /layout/footer.ejs |||| {}  -*>
                    * ---
                    */

                    /*
                    * ---   <$$ if(typeof isPageLogin=='boolean'){ $$>
                    * ---       <html class="reghtml">
                    * ---   <$$ }else{ $$>
                    * ---       <html>
                    * ---   <$$ } $$>
                    */

                    var flag=true;
                    while (flag){
                        var start=file.indexOf('<*-'), end=0;
                        if(start>=0) {
                            end = file.indexOf('-*>');
                            var str = file.substring(start, end + 3);
                            var str2=str.substring(3,str.length-3);
                            var str2Arr=str2.split('||||');
                            str2Arr[0]=str2Arr[0].replace(/(^\s*)|(\s*$)/g, "");
                            str2Arr[1]=str2Arr[1].replace(/(^\s*)|(\s*$)/g, "");
                            /**/
                            var str1=fs.readFileSync(__dirname + str2Arr[0], 'utf8');
                            var o={};
                            try{
                                o=JSON.parse(str2Arr[1]);
                                var returnStr=ejs.render(str1,o);
                                file=file.replace(str,returnStr);
                            }catch(e){
                                console.log('模板入参转换json出错');
                                res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
                                res.end('模板入参转换json出错','utf8');
                                break;
                            }
                            /**/

                        }else flag=false;
                    }

                    //console.log(file);
                    if (err) {
                        res.writeHead(500, {
                            'Content-Type': 'text/plain'
                        });
                        res.end(err);
                    } else {
                        var contentType = mine[ext] || "text/plain";
                        res.writeHead(200, {
                            'Content-Type': contentType
                        });
                        res.write(file, "utf-8");
                        res.end();
                    }
                });
            }else{
                fs.readFile(realPath, "binary", function (err, file) {
                    if (err) {
                        res.writeHead(500, {
                            'Content-Type': 'text/plain'
                        });
                        res.end(err);
                    } else {
                        var contentType = mine[ext] || "text/plain";
                        res.writeHead(200, {
                            'Content-Type': contentType
                        });
                        res.write(file, "binary");
                        res.end();
                    }
                });
            }

        }
    });

});
server.listen(PORT);
console.log("Server runing at port: " + PORT + ".");


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
与 Python 的 SimpleHTTPServerNode.js 的 serve 不同,serve2 是一个支持动态文件的工具,前者们只支持静态文件,而serve2支持编代码动态处理和返回http请求。 常常我们可能会有这样的需求场景:无论是在开发时还是尝试某个框架时,往往需要处理请求参数、Cookies、Http headers等,这样简单的静态文件服务器便无法满足这种需求了。 于是serve2便应运而生了,基于Tj的serve开发,使用起来跟一般的静态文件服务器相同,执行一条命令即可。详细的用法介绍如下。 1. 下载安装 npm install -g serve2 2. 使用运行 λ serve2 --help   Usage: serve2 [options] [dir]   Options:     -h, --help                output usage information     -V, --version             output the version number     -a, --auth <user>:<pass>  specify basic auth credentials     -F, --format <fmt>        specify the log format string     -p, --port <port>         specify the port [3000]     -H, --hidden              enable hidden file serving     -S, --no-stylus           disable stylus rendering     -J, --no-jade             disable jade rendering         --no-less             disable less css rendering     -I, --no-icons            disable icons     -L, --no-logs             disable request logging     -D, --no-dirs             disable directory serving     -f, --favicon <path>      serve the given favicon     -M, --mocks <path>        mock files directory         --cookies             add cookies parse support     -C, --cors                allows cross origin access serving         --compress            gzip or deflate the response         --exec <cmd>          execute command on each request 标签:serve2 分享 window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "2", "bdMiniList": [], "bdPic": "", "bdStyle": "1", "bdSize": "24" }, "share": {} }; with (document)0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' ~(-new Date() / 36e5)];\r\n \r\n \r\n \r\n \r\n \u8f6f\u4ef6\u9996\u9875\r\n \u8f6f\u4ef6\u4e0b\u8f7d\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\nwindow.changyan.api.config({\r\nappid: 'cysXjLKDf', conf: 'prod_33c27aefa42004c9b2c12a759c851039' });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值