我的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 ...
随机推荐
- 用c#创建支持多语言的WinForm应用程序
实现多语言的方法可能有使用资源文件,或者配置xml两种方法吧.没时间研究过多,学习了一下使用资源文件的方法,成功了. 在.net2.0 中,m$ 为我们提供了一种简单方便的方法, 使用资源文件 1.新 ...
- Unity学习疑问记录之 动作动画忽略timeScale
http://www.bubuko.com/infodetail-968864.html
- Java NIO3:通道和文件通道
通道是什么 通道式(Channel)是java.nio的第二个主要创新.通道既不是一个扩展也不是一项增强,而是全新的.极好的Java I/O示例,提供与I/O服务的直接连接.Channel用于在字节缓 ...
- 利用Hexo搭建个人博客-环境搭建篇
我是一个爱写博客进行总结分享的人.然而,有着热爱写博客并且深知写博客好处的我,却没有好好的把这个习惯坚持下来.如今毕业已经一年多了吧,每一次与师弟师妹们聊天,我总会意味深长的建议他们,一定要定期梳理总 ...
- WPF入门教程系列十九——ListView示例(一)
经过前面的学习,今天我做一个比较综合的WPF程序示例,主要包括以下功能: 1) 查询功能.从数据库(本地数据库(local)/Test中的S_City表中读取城市信息数据,然后展示到WPF的Windo ...
- IOS系列swift语言之课时二
今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...
- ATM模拟器(附代码及运行结果)
源代码: import java.util.Scanner; class Account{ String identify; String name; String date; String key; ...
- intellij IDEA 出现“Usage of API documented as @since 1.6+”的解决办法
问题 在导入java.io.console的时候出现"Usage of API documented as @since 1.6+"
- HTML5系列:HTML5绘图
1. canvas元素基础 canvas元素是HTML5中新增的一个重要元素,专门用来绘制图形. 在页面中使用canvas元素绘制图形需要经过的三个步骤: 步骤一 使用canvas元素创建一个画布区 ...
- Sql Server系列:Update语句
1 UPDATE语法结构 [ WITH <common_table_expression> [...n] ] UPDATE [ TOP ( expression ) [ PERCENT ] ...