我的Node.js处女作
前言
很高兴我的node.js处女作开发完成了,目前还在优化完善阶段,经历两周的紧张沟通和开发,工作总算搞一段落。选用node.js 一是因为这次的业务逻辑相对来说简单想拿node练练手,二就是相对来说在处理高并发时比较有简单粗暴的优势,官方自己的话说处理百万级并发都很easy,这也是我跟解决方案经理吹牛的理由。
开发完几个问题
1、因为做项目的惯性,在连接数据库时就想分层,Dao或者Repository。那么在这次的node项目中我没有分层,因为连接是在app.js中打开并且通过中间件注入Express Request中,我不知道以什么方式把连接传入Dao层,当然也不太明确Dao层如何组织,也不太明确如何在路由.js文件中如何更好的调用Dao层。
2、如果生产部署的话肯定是需要绑定域名的,那么目前最简单的绑定方式和部署方式是什么?(已了解到使用nginx来部署,但还没实践,同时也可以处理并发负载)。
用到的技术和知识点
1、Express框架(4.x)。没什么可说的MVC框架,node.js官方推荐的框架,最起码你用reqeust,response顺手很多。
2、node.js连接Mysql。 在连接mysql时我用了一个插件express-myconnection,并且注册成中间件可以在每次请求的request那到connection,上一篇文章中总结过, 但随即我在评论中看到有人持反对态度,并且点了反对,他的理由是你做成中间件,那么每个路由请求中都会连接数据库。 随后我又查了官网和其他的一些资料,他们推荐是这样做的,并且解释到这样使用每个connection的生命周期也就是到response结束连接就会释放掉。
//app.js app.use(
connection(mysql, {
host: '127.0.0.1',
user: 'root',
password: '*****',
port: '3306',
database: 'db'
}, 'pool') //选择资源池,系统自己release connection to poll
); //routes/order.js
router.get('/cost', function(req, res, next) {
req.getConnection(function(err, conn) {
//处理你的数据逻辑
});
});
3、node.js 连接redis。连接redis直接使用createClient,使用不使用pool都可以。
var redis = require('redis'),
client = redis.createClient();
//选择数据库
client.select('0',function(err){})
//判断key是否存在
client.exists(key, function(err, result) {})
//设置hash set值
client.hmset(key,[],function(err,result){})
//获取hash set值
client.hgetall(key, function(err, obj) {})
//获取key value值
client.get(key, function(err, result) {});
//设置key value
client.set(key, opValue, function(err, result) {})
4、使用log4js。当然生产运行的接口程序少不了日志的运行。log4js还能配置发送邮件,但我没调通,仅仅是报错时看下log。
//做成json配置文件
{
"appenders": [
{ "type": "console", "category": "console" }, {
"type": "dateFile",
"filename": "d:/weblogs/logs/",
"pattern": "yyyyMMddhh.txt",
"absolute": true,
"alwaysIncludePattern": true,
"category": "logInfo"
}
],
"levels": { "logInfo": "DEBUG" }
}
//调用
var log4js = require('log4js');
log4js.configure('./log4js.json');
var logger = log4js.getLogger('logInfo');
//错误日志
logger.err('测试日志');
//info日志
logger.info('测试日志');
我的Node.js处女作的更多相关文章
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 利用Node.js的Net模块实现一个命令行多人聊天室
1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...
- Node.js:进程、子进程与cluster多核处理模块
1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...
- Node.js:理解stream
Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...
- Node.js:Buffer浅谈
Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
- Node.js入门(一)
一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...
- Node.js学习笔记——Node.js开发Web后台服务
一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
随机推荐
- 【转】POJ题目分类推荐 (很好很有层次感)
OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...
- 怎么可以让div自适应屏幕的高度?(已解决)
主要解决问题的方法是用JS脚本. 先看布局, 一个div是首部,另一个div是主体,主体包含左侧菜单和右侧内容. 我想把主体div的高度自适应屏幕剩余区域,怎么做? 首先,获取可见区域的高度,docu ...
- 发布一个自用的ansi转utf8程序
前几天网上下载了一个国外的源码示例,布署到IIS上,查看网页中文显示乱码,各种不方便,你懂的. 用记事本打开文件,显示是ANSI格式,另存为UTF8格式,保存,再查看页面就正常显示中文了. 文件好多, ...
- Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码
Linux 部署ASP.NET SQLite 应用 的坎坷之旅.文章底部 附示例代码. 有一台闲置的Linux VPS,尝试着部署一下.NET 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记 ...
- Android安全开发之安全使用HTTPS
Android安全开发之安全使用HTTPS 1.HTTPS简介 阿里聚安全的应用漏洞扫描器中有证书弱校验.主机名弱校验.webview未校验证书的检测项,这些检测项是针对APP采用HTTPS通信时容易 ...
- .Net开发笔记(二十一) 反射在.net中的应用
反射概念在网上到处都有,但是讲到的具体的应用很少,一个重要的原因是现实中真的很少用得到它.引用msdn上对“反射”的解释: "通过 System.Reflection 命名空间中的类以及 S ...
- SOA相关资料整理分享
昨@幸福框架同学问能否推荐SOA一些资,.想想之前看过不少资料文档,就整理分享下,有需要的可以参考下. 文章链接 理解面向服务的体系结构中企业服务总线场景和解决方案,第 1 部分 SOA 和 web ...
- 分辨率、DPI、PPI和屏幕尺寸,你都知道是啥么?
分辨率.DPI.PPI和屏幕尺寸 分辨率 DPI/PPI 坑爹的屏幕尺寸 Reference 手机开发中不免会遇到分辨率.DPI.PPI和屏幕尺寸等术语,那就弄弄清楚这些概念的真正含义. 分辨率 分辨 ...
- 利用C#自带组件强壮程序日志
在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简单的栗子,只是说明这个框架是怎么工 ...
- 3dmax模型制作备忘录
md2导出: http://thegreystudios.com/blog/?p=278 http://wenku.baidu.com/view/4d5652e2524de518964b7d89.ht ...