上篇: nodejs简易server环境及简易接口路由 写在一起
再来个带inclue功能的,nodejs简易server环境及简易接口路由 写在一起 (2)
grunt:搞定一些自动完成
[ autoprefixer, contrib-cssmin, contrib-jshint, contrib-less, contrib-uglify, contrib-watch,ejs, browser-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 + ".");