nodejs使用笔记
2015-07-31 16:52
489 查看
1、nodejs与java开发的最大区别在于:事件处理机制以及相应的回调函数。
事件处理机制:即非阻塞IO操作,类似fs操作、网络访问、数据库查询、redis查询等等,都是在主进程的基础上,注册事件到事件队列,与主进程通过回调函数(钩子)关联,其实相当于java中的excutror带返回值的runable。
2、使用express4.x做web框架开发,express4.x相对于express3.x主要的改变,是将4.x中的集成模块,全部独立开来,按《linux设计思想》的准则来解释:小即是美,所有插件做到小而精,只做好一件事。
至于具体哪些插件抽离出来了
3、express-flash主要是用来做,比如第一次请求
var logger = require('./logging').getLogger(module);
var redis = require('redis');
var config = require('./config').config;
var client = redis.createClient(config.redis_port,config.redis_host,{});
//错误监听
client.on("error", function (err)
{
console.log("redis client error!")
});
module.exports = {
get: function (key, callback)
{
client.get(key,callback);
},
set:function (key, value, callback)
{
client.set(key, value, callback);
},
setWithExpire:function (key, value, timeout, callback)
{
client.set(key, value, callback);
client.expire(key, timeout);
},
close:function() {
client.close();
}
}
8、小经验
1)使用nodejs页面长时间等待(页面超时)一般就是没有返回,未执行 res.render或者res.send等,原因可能回调没有处理到返回。
2)一个请求需要经过n个异步操作,肯定要async.auto改装成同步的,同时还有个技巧,如redis封装的那样,将多个异步封装成一个,可以简化代码,提高可读性。
事件处理机制:即非阻塞IO操作,类似fs操作、网络访问、数据库查询、redis查询等等,都是在主进程的基础上,注册事件到事件队列,与主进程通过回调函数(钩子)关联,其实相当于java中的excutror带返回值的runable。
2、使用express4.x做web框架开发,express4.x相对于express3.x主要的改变,是将4.x中的集成模块,全部独立开来,按《linux设计思想》的准则来解释:小即是美,所有插件做到小而精,只做好一件事。
至于具体哪些插件抽离出来了
3、express-flash主要是用来做,比如第一次请求
req.flash('loginMessage', '用户名或密码错误!'));经过了一次跳转,到达第二次请求的controller中,依然可以req.flash('loginMessage');到,其实原理就是:将信息存session,第二次请求获取之后,立即清除,只不过不用我们手动去写。
4、nodejs的开发,每次修改js文件,都需要重新启动才能看到效果,同样是解释型脚本语言php不需要,原因是:这是因为 Node.js 只有在第一次引用到某部份时才会去解析脚本文件,以后都会直接访问内存,避免重复载入,而 PHP 则总是重新读取并解析脚本(如果没有专门的优化配置)。Node.js的这种设计虽然有利于提高性能,却不利于开发调试
5、使用multer做文件上传,或者调用文件服务器接口,做文件上传(这种实际是常用的)。
6、如果将nodejs项目文件部署成nginx代理,那么必须要支持basepath,basepath包括3个地方配置,fav.con,static,controller路径
nodejs设置basepath,static的 app.use("/activity", express.static(path.join(__dirname, 'public')));常规访问设置basepath
var express = require('express');var router = express.Router(); //router实现basepath功能
//basepath或者作为一个迷你应用app.use('/activity', router); 7、nodejs整合redis引入redis插件,做成一个module,然后export出去
var logger = require('./logging').getLogger(module);
var redis = require('redis');
var config = require('./config').config;
var client = redis.createClient(config.redis_port,config.redis_host,{});
//错误监听
client.on("error", function (err)
{
console.log("redis client error!")
});
module.exports = {
get: function (key, callback)
{
client.get(key,callback);
},
set:function (key, value, callback)
{
client.set(key, value, callback);
},
setWithExpire:function (key, value, timeout, callback)
{
client.set(key, value, callback);
client.expire(key, timeout);
},
close:function() {
client.close();
}
}
8、小经验
1)使用nodejs页面长时间等待(页面超时)一般就是没有返回,未执行 res.render或者res.send等,原因可能回调没有处理到返回。
2)一个请求需要经过n个异步操作,肯定要async.auto改装成同步的,同时还有个技巧,如redis封装的那样,将多个异步封装成一个,可以简化代码,提高可读性。
相关文章推荐
- nodejs 模块安装与使用
- MonoDevelop 常用设置和快捷键
- nodejs随记01
- nodejs安装express
- nodejs windows环境安装
- Delete Node in a Linked List Java LeetCode
- LeetCode_237 Delete Node in a Linked List
- Cannot delete .... . Name node is in safe mode
- hadoop启动后jps查看总是不显示namenode进程,然后重新格式化hdfs
- node-odata: ASP.NET WEB API OData的替代品
- VFS,super_block,inode,dentry—结构体图解
- [CareerCup] 4.2 Route between Two Nodes in Directed Graph 有向图中两点的路径
- java学习脚印:xml中空白文本结点(whitespace TextNode)处理及验证方法
- leetcode之路019 Remove Nth Node From End of List
- NodeJS + PhantomJS 抓取页面信息以及截图
- 利用nodejs+phantomjs+casperjs采集淘宝商品的价格
- Algorithms—237.Delete Node in a Linked List
- datanode无法启动
- 116.Populating Next Right Pointers in Each Node(二叉完全树的next结点)
- nodemailer的使用