Nodejs入门边读边想边记(-)
Node入门>>一本全面的Node.js教程网站地址:http://www.nodebeginner.org/index-zh-cn.html
本文记录我在阅读上面这个网站的过程中得到的一些体会及需要记录的地方。
就像这样,我们传递一个东西,然后服务器利用这个东西来完成一些事。嗨那个叫路由的东西,能帮我把这个路由一下吗?
但是服务器其实不需要这样的东西。它只需要把事情做完就行,其实为了把事情做完,你根本不需要东西,你需要的是动作。也就是说,你不需要名词,你需要动词。
分析的只管分析,路由的工作交给路由来完成
在现在的实现下,路由过程会在路由模块中“结束”,并且路由模块并不是真正针对请求“采取行动”的模块,否则当我们的应用程序变得更为复杂时,将无法很好地扩展。
在这里我们得做个决定:是将requestHandlers模块硬编码到路由里来使用,还是再添加一点依赖注入?虽然和其他模式一样,依赖注入不应该仅仅 为使用而使用,但在现在这个情况下,使用依赖注入可以让路由和请求处理程序之间的耦合更加松散,也因此能让路由的重用性更高。
同样的,路由仅仅处理路由工作,低耦合会提高模块的重用性
下面一段来自msdn的介绍:http://msdn.microsoft.com/en-us/magazine/cc163419.aspx
在C++或C#中,当我们谈到对象,指的是类或者结构体的实例。对象根据他们实例化的模板(就是所谓的类),会拥有不同的属性和方法。但在 JavaScript里对象不是这个概念。在JavaScript中,对象就是一个键/值对的集合 -- 你可以把JavaScript的对象想象成一个键为字符串类型的字典。
JavaScript的对象仅仅是键/值对的集合,它又怎么会拥有方法呢?好吧,这里的值可以是字符串、数字或者……函数!
大量的关系映射,可以使用关联数组来完成,这样,会使程序变得干净、整洁。
Node.js会将POST数据拆分成很多小的数据块,然后通过触发特定的事件,将这些小数据块传递给回调函数。这里的特定的事件有data事件(表示新的小数据块到达了)以及end事件(表示所有的数据都已经接收完毕)。
以下是测试中可能出现的一些问题,用注释做了解释
function show(response){ console.log("Request handler 'show' was called"); fs.readFile("tmp/guitarbg.jpg","binary",function(error,file){//这里读取的是程序所在目录下的tmp文件夹 if(error){ response.writeHead(500,{"Content-Type":"text/plain"}); response.write(error+"\n"); response.end(); }else{ response.writeHead(200,{"Content-Type":"image/png"}); response.write(file,"binary"); response.end(); } }) }
function upload(response,request){ console.log("Request handler 'upload' was called."); var form = new formidable.IncomingForm(); form.uploadDir = 'D:/tmp';//windows下可能出现“..no such file or directory..”的错误,导致此错误的问题是文件夹权限不足或者是目录不存在,在这里使用uploadDir重新指定临时文件所在目录 console.log("about to parse"); form.parse(request,function(error,fields,files){ console.log("parsing done"); console.log("file path:"+files.upload.path); fs.renameSync(files.upload.path,"tmp/guitarbg.jpg"); response.writeHead(200,{"Content-Type":"text/html"}); response.write("receive image:<br>"); response.write("<img src='/show' />"); response.end(); }); }
最新文章
- 总结30个CSS3选择器(转载)
- Android点击EditText文本框之外任何地方隐藏键盘的解决办法
- Sublime Text : 创建工程
- WeChat Official Account Admin Platform Message API Guide
- Sql Server 判断表或数据库是否存在
- WPF软件开发系统之二——水环境检测Surface触摸屏软件开发
- [Linux]权限s权限和t权限
- C++ 仿函数
- linux系统常用运维命令
- OC Swift中检查代码行数
- BZOJ1010 [HNOI2008]玩具装箱toy 动态规划 斜率优化
- 转载:centos安装redis
- cf250D. The Child and Sequence(线段树 均摊复杂度)
- THE CUP OF LIFE即生命之杯。
- Java枚举类型的用法
- generatorConfig.xml
- npm和cnpm(windows)安装步骤
- Coding.net进阶,使用Git管理代码
- java中容器的概念
- hdu4035 Maze 【期望dp + 数学】
热门文章
- 6.1 安装Ubuntu
- 20169219 linux内核原理与分析第二周作业
- redis系列:redis介绍与安装
- 浅谈REST API
- System.Threading.Thread的使用及传递参数等总结
- webpack@3.6.0(4) -- 配置模块化开发
- 飘逸的python - 单例模式乱弹
- Educational Codeforces Round 52E(构造,快速幂)
- 从零开始安装 Ambari (1) -- 安装前的准备工作
- 【转】C# String 前面不足位数补零的方法