nodejs的优点?
它是一个Javascript运行环境
依赖于Chrome V8引擎进行代码解释
事件驱动
事件驱动
单线程、单进程
nodejs适合什么样的业务?
高并发
I/O密集性业务
nodejs不适合什么样的业务?
CPU密集型,长期占用cpu,I/O困难
只支持单核CPU,不能充分利用CPU(pm2也可解决)
我的使用过程中的坑
嵌套回调大坑
//读取多个文件的内容合并到一个总的文件,如果现在两个文件还可以理解,但是如果是10个文件,一路嵌套无法维护 fs.readFile('/etc/passwd', function (err, data) { if (err) throw err; fs.readFile('/etc/passwd2', function (err, data2) { if (err) throw err; fs.readFile('/etc/passwd2', function (err, data2) { if (err) throw err; }); }); });
try catch中callback执行多次
首先这里错误抓取不到
如果此try中加入callback,一旦外层抛出错误,此处的异常提示不正常,并且callback会执行两次的错误。
pm2和schedule
pm2可以合理利用服务器的cpu,我们一个定时服务用node-schedule模块,服务用pm2启动并且启用了4核,导致服务跑了4次
解决遇到的坑
嵌套回调async
集合: Collections
流程控制: Control Flow
工具类: Utils
集合:
each如果想对同一个集合中的所有元素都执行同一个异步操作。
sortBy: 对集合内的元素进行排序,依据每个元素进行某异步操作后产生的值,从小到大排序。
concat: 将多个异步操作的结果合并为一个数组。
流程控制:
series: 串行执行,一个函数数组中的每个函数,每一个函数执行完成之后才能执行下一个函数。
waterfall: 按顺序依次执行一组函数。每个函数产生的值,都将传给下一个。
auto: 用来处理有依赖关系的多个任务的执行。
parallel: 并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行。
工具类:
memoize: 让某一个函数在内存中缓存它的计算结果。
log: 执行某异步函数,并记录它的返回值,日志输出。
2、try catch 中间件express-domain-middleware
process.on('uncaughtException', function (err) { console.error(err); });
nodejs 的那些坑
本文暂时没有评论,来添加一个吧(●'◡'●)