---恢复内容开始---

  新公司用的nodejs作为app和网站的后台服务server,所以最近对nodejs一直在学习,加上之前简单的学习了一点,看了两天后台接口源码,所以就直接上手干活了,下面是我和写后台接口的哥哥的一段对话:

  后台:过两天的后台管理你写的话,用express写还是不用?

  我  :看了两天后台源码,我觉得用express更省力一些,因为要牵涉到一些界面操作,用express创建项目应用模板和其他一些工具更方便,但是从工作分配上来说的话,用自己写的server代码结构更清晰,前后端完全分离,互不影响。

  后台:了解RESTful吗?

  我  :了解过一点,面试被问到过。(面试确实被问到过,回去之后百度了下,但是忘了)

  然后后台哥哥给我解释了下RESTful相关的一些东西,但是我有点不是太明白。

  在后台哥哥写的后台api server中,按照最基本的server机构写的,上代码:

  server.js

var http=require('http');
var router=require('./router'),
url=require('url'),
serverPort=8888;
var logger=require('./common').logger; function start(router,handler){
function onRequest(request,response){ request.setEncoding('UTF-8'); var postData="";
request.addListener('data',function(postDataChunk){
postData += postDataChunk;
}); request.addListener('end',function(){
logger.info('Server is normal,Request recieved...');
router(request,response,postData,handler);
}); } http.createServer(onRequest).listen(serverPort);
logger.info('Server start on port:'+serverPort);
} logger.trace('Entering cheese testing'); exports.start = start;

router.js:

var url=require('url');
var fs=require('fs');
function router(request,response,postData,handler){
var pathname=url.parse(request.url).pathname;
console.log(' request received at '+pathname);
console.log(' pathname:'+pathname);
console.log(' handler[pathname]:'+handler[pathname]);
if(typeof handler[pathname] === 'function'){
handler[pathname](request,response,postData);
} else{
console.log('read resource here ...,now reading resources is : >>> '+pathname);
fs.readFile(__dirname+pathname,function(err,data){
if(err){
response.writeHead(404,{'content-type':'text/html'})
response.write('<center><h1 style="font-family:microsoft yahei">');
response.write('404,Sorry ,not found your visiting page...');
response.write('</h1></center>')
response.end();
}
else{
response.write(data);
response.end();
}
});
}
} exports.router=router;

  

requestHandlers.js:

var logger = require('./common').logger;

var util=require('util');

function response_err(response,err){
var rdata={};
rdata['result']='-1';
rdata['message']=err;
response.write(JSON.stringify(rdata));
response.end(); if(err.code === 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR'){
process.exit(0);
} logger.info('<<< response_err.', JSON.stringify(rdata));
} function response_success(response,rdata){
rdata['result']='0';
response.write(JSON.stringify(rdata));
response.end(); logger.info('<<< response_success.', JSON.stringify(rdata));
} function login(request,response,postData){
redirect_login(request,response,postData,function(err,rdata){
if(err){
response_err(response,err);
}else{
response_success(response,rdata);
}
});
}
function qzone(request,response,postData){ function teacherList(request,response,postData){
redirect_teacherList(request,response,postData);
}
exports.index=redirect_index;
exports.login=login;

index.js:

var http= require('http'),
router=require('./router'),
requestHandlers=require('./requestHandlers'),
server=require('./server'),
cluster=require('cluster'),
cpuNums=require('os').cpus().length; var handlers={}; handlers['/oper/login']=requestHandlers.login; if(cluster.isMaster){
console.log('Master work start ...');
for(var i=0;i<cpuNums;i++){
cluster.fork();
} cluster.on('exit',function(worker,code,signal){
console.log('worker '+worker.process.pid +' died ...');
}); }else{
server.start(router.router,handlers);
}

  

都是节选代码,有的地方式开发用的,为了避免泄露工作方面的,就节选了。

结构是这么个结构,然后再慢慢添加需要的模块,结合nginx的反向代理使用,很ok。

nodejs 从helloworld到高质量的后台服务server的一点思考的更多相关文章

  1. 使用vue1.0+es6+vue-cli+webpack+iview-ui+jQuery 撸一套高质量的后台管理系统

    首先按照vue.js官网的指令安装: 1.本地安装好node.js 2.根据官方命令行工具 详情 这样一个官方的脚手架工具就已经搭建好了:但是有一点需要注意的是由于现在按照官方的搭建方法是搭建vue2 ...

  2. HTML Inspector – 帮助你编写高质量的 HTML 代码

    HTML Inspector 是一款代码质量检测工具,帮助你编写更优秀的 HTML 代码.HTML Inspector 使用 JavaScript 编写,运行在浏览器中,是最好的 HTML 代码检测工 ...

  3. R语言绘图高质量输出

    R语言通过支持Cairo矢量图形处理的类库,可以创建高质量的矢量图形(PDF,PostScript,SVG) 和 位图(PNG,JPEG, TIFF),同时支持在后台程序中高质量渲染.在ggplot2 ...

  4. R语言的高质量图形渲染库Cairo(转)

    前言 R语言不仅在统计分析,数据挖掘领域,计算能力强大.在数据可视化上,也不逊于昂贵的商业.当然,背后离不开各种开源软件包的支持,Cairo就是这样一个用于矢量图形处理的类库. Cairo可以创建高质 ...

  5. 编写高质量代码:改善Java程序的151个建议(第二章:基本类型)

    编写高质量代码:改善Java程序的151个建议(第二章:基本类型) 目录 建议21:用偶判断,不用奇判断 建议22:用整数类型处理货币 建议23:不要让类型默默转换 建议24:边界还是边界 建议25: ...

  6. 老司机告诉你高质量的Java代码是怎么练成的?

    一提起程序员,首先想到的一定是"码农",对,我们是高产量的优质"码农",我们拥有超跃常人的逻辑思维以及不走寻常路的分析.判别能力,当然,我们也有良好的编码规范, ...

  7. 使用koa2+es6/7打造高质量Restful API

    前言 如今nodejs变得越来越火热,采用nodejs实现前后端分离架构已被多数大公司所采用. 在过去,使用nodejs大家首先想到的是TJ大神写的express.js,而发展到如今,更轻量,性能更好 ...

  8. 编写高质量代码:改善Java程序的151个建议 --[117~128]

    编写高质量代码:改善Java程序的151个建议 --[117~128] Thread 不推荐覆写start方法 先看下Thread源码: public synchronized void start( ...

  9. 编写高质量代码改善C#程序的157个建议——建议155:随生产代码一起提交单元测试代码

    建议155:随生产代码一起提交单元测试代码 首先提出一个问题:我们害怕修改代码吗?是否曾经无数次面对乱糟糟的代码,下决心进行重构,然后在一个月后的某个周一,却收到来自测试版的报告:新的版本,没有之前的 ...

随机推荐

  1. AiCloud 2.0 AT开发文档【转】

    本文转载自:http://wiki.ai-thinker.com/aicloud/docs/atdevelop AT指令一览表 AiCloud AT指令   指令 描述 AT+CLDSTART 启动云 ...

  2. 转载:SPFA算法学习

    转载地址:http://www.cnblogs.com/scau20110726/archive/2012/11/18/2776124.html 粗略讲讲SPFA算法的原理,SPFA算法是1994年西 ...

  3. 最全面的HashMap和HashTable的区别

    找工作期间不少企业都会问到有关HashMap和HashTable两者直接的区别,很多博客里虽然有提及但总是没有那么全面,只是一些常用的不同,现在就我自己所总结的比较全面的不同,归纳以下: HashMa ...

  4. 0-mybatis目录

    mybatis 第一天: 对原生态jdbc程序(单独使用jdbc开发)问题总结 框架原理 入门程序 用户的增.删.改.查 开发dao两种方法: 原始dao开发方法(程序需要编写dao接口和dao实现类 ...

  5. Mockito @BeforeClass @BeforeMethod @BeforeTest 的生命周期

    @BeforeClass---@AfterClass 类实例化前, 被执行, 主要用于设置环境变量等, 与SpringTestContext结合用的时候要注意, 这种情况下@autowire的bean ...

  6. 分享知识-快乐自己:SpringMVC 结合使用拦截器(判断是否用户是否已登陆)

    基础拦截器操作: 拦截器是一种AOP操作实现,那么在AOP之中用户一定不需要去关注拦截器的存在,用户只需要按照自己已经习惯的处理方式进行代码的编写即可. 首先我们先创建一个自定义的拦截器: packa ...

  7. centos7下面搭建lnmp环境

    参考大神博客: http://www.linuxzen.com/lnmphuan-jing-da-jian-wan-quan-shou-ce-si-lnmpda-jian-yuan-ma-an-zhu ...

  8. BaseAdapter/AsyncTask/..等等细节

    BaseAdapter中的getCount之类的函数,是在constructor之后才启动的.这印证了构造函数的优先级是max的. 图片 这一点的意义在于,当你想给getCount返回一个具体参数的时 ...

  9. HihoCoder1333 :平衡树(splay+lazy)(区间加值,区间删除)

    描述 小Ho:好麻烦啊~~~~~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊!前几天老师让我帮忙管理一下团队的人员,但是感觉好难啊. 小Hi:说来听听? 小Ho:事情是这样的.我们有一个运动同好会 ...

  10. 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心

    题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0 ...