Chinaunix首页 | 论坛 | 博客
  • 博客访问: 201165
  • 博文数量: 43
  • 博客积分: 2178
  • 博客等级: 大尉
  • 技术积分: 390
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 15:19
文章分类

全部博文(43)

文章存档

2012年(23)

2011年(10)

2009年(10)

分类: 系统运维

2012-02-02 13:41:58

 好好学习,天天向上。

这是一个连载,记录偶学习nodejs的笔记。

函数传递:


在nodejs中 函数和变量一样,可以当成参数进行传递
  1. function say (v) {
  2.   console.log(v);
  3. }

  4. function execute(sf, v) {
  5.     sf(v);
  6. }
  7. execute(say, 'show');
匿名函数:
这是js特有的组织方式,它的定义可以节省一个定义函数名字,也就是不用起名字啦。
  1. execute(function(v){console.log(v)}, 'show');
基于事件驱动的回调函数:
其实到现在还是不太明白,大概就是这样的
  1. var http = require("http");

  2. http.createServer(function(request, response) {
  3.     console.log('callback');
  4.     response.writeHead(200, {"Content-Type":"text/plain"});
  5.     response.write("

    你好 世界

    "
    );
  6.     response.end();
  7. }).listen(8881);

  8. console.log('run:');
当用 nodejs.exe 打i开文件时,命令行会直接输出run:.....
当用浏览器打开 local...:8001 命令行会输出callback...

让写的server 变成一个node模块:
  1. //server.js
  2. var http = require("http");
  3. function start() {
  4.     http.createServer(function(request, response) {
  5.         console.log('callback');
  6.         response.writeHead(200, {"Content-Type":"text/plain"});
  7.         response.write("

    你好 世界

    "
    );
  8.         response.end();
  9.     }).listen(8881);
  10.     console.log('run:');
  11. }
  12. exports.start =start;
将server.js中的代码 用start函数包含,并赋值到 exports
  1. //index.js
  2. var server = require("./server");
  3. server.start();
这里执行nodejs.exe index.js 将执行server的函数。

加入路由用来处理程序:
加入路由规则才能按需要处理不同的模块,如url中 /start /upload 分别代表两个功能。

  1. //新建 route_heat.js
  2. function start () {
  3.     console.log('is start');
  4. }

  5. function upload () {
  6.     console.log('is upload');
  7. }

  8. exports.start = start;

  9. exports.upload = upload;
用来处理路由的返回结果。

  1. //index.js
  2. var server = require("./server");
  3. var route = require("./route");
  4. var routeheat = require('./route_heat');


  5. var handle = {}
  6. handle["/"] = routeheat.start;
  7. handle["/start"] = routeheat.start;
  8. handle["/upload"] = routeheat.upload;
  9. server.start(route.route, handle);
加入路由处理结果模块,并创建路由映射关系对象。并在start函数中 加入关系对象。

  1. //server.js
  2. var http = require("http");
  3. var url = require("url");

  4. function start(route, handle) {
  5.     http.createServer(function(request, response) {
  6.         //console.log('callback');
  7.         var pathname = url.parse(request.url).pathname;
  8.         //console.log('run:'+ (typeof route));
  9.         route(handle, pathname);
  10.         //console.log(pathname);
  11.         response.writeHead(200, {"Content-Type":"text/plain"});
  12.         response.write("

    你好 世界

    "
    );
  13.         response.end();
  14.     }).listen(8881);
  15.     console.log('run:');
  16. }
  17. exports.start =start;
在server中接收处理对象和url,pathname传递到 route函数中。
  1. //route.js
  2. function route(handle, pathname) {
  3.     console.log('About route:' + pathname);
  4.     if (typeof handle[pathname] === 'function') {
  5.         handle[pathname]();
  6.     } else {
  7.         console.log('is not pathname>'+pathname);
  8.     }
  9. }

  10. exports.route = route;
在route函数中判断url中 / 后面对应的路由,并返回结果。


阅读(1928) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~