Node-js
深情小建
这个作者很懒,什么都没留下…
展开
-
第10章-为Node.js应用上线做准备
诚然,不同应用在架构、所用框架以及预期目标等方面各不相同。 可是,它们仍然有很多共性值得我们关注,如环境变量、多线程、日志和错误处理等。 1、环境变量 2、生产环境下的Express.js 3、生产环境下的Socket.IO 4、错误处理 5、错误处理工具Node.js domains 6、使用Cluster处理多线程 7、使用Cluster2处理多线程 8、事故日志和监控 9原创 2017-06-18 19:06:15 · 315 阅读 · 0 评论 -
第7章-使用ORM类库Mongoose提升你的Node.js数据-7.6.使用population建立关系和连接
虽然,在NoSQL类的数据库,例如MongoDB中是不存储关系数据的,但是我们可以在应用层进行存储。 Mongoose提供了这一特性,名为population。 他允许我们使用不同的集合来填充文档的特定部分。 假设我们有posts和users两个集合 我们可以在user的原型中引用posts:var mongoose = require('mongoose'), Schem原创 2017-06-18 18:58:06 · 665 阅读 · 0 评论 -
第7章-使用ORM类库Mongoose提升你的Node.js数据-7.5.Mongoose模型
就像在很多其他ORM中一样,在Mongoose中,模型都是最基础的对象。 将原型编译为一个模型,使用mongoose.model(name, schema)即可 如:var Book = mongoose.model('Book', bookSchema);第一个参数是一个字符串,我们可以使用它来调用这个实例。 通常,这个字符串和模型的变量名一致(例如:Book)我们可以使用原创 2017-06-18 18:57:38 · 429 阅读 · 0 评论 -
第7章-使用ORM类库Mongoose提升你的Node.js数据-7.4.自定义静态方法和实例方法
除了数十个内建的Mongoose模型方法,我们还可以增加一些自定义的方法。 比如,当我们实现自定义实例方法buy()后,就可以调用practicalNodeBook文档的buy()方法。bookSchema.method({ buy: function(quantity, customer, callback){ var bookToPurchase = this原创 2017-06-18 18:57:12 · 399 阅读 · 0 评论 -
第7章-使用ORM类库Mongoose提升你的Node.js数据-7.3.使用钩子保持代码的逻辑清晰
在复杂的、拥有很多相互关联对象的应用中,我们可能会在保存一个对象之前想执行某些特定的逻辑。 钩子(Hooks)正是存储这些逻辑的好地方。 例如,我们可能想在保存book这个文档之前上传一个PDF:bookSchema.pre('save', function(next){ // 准备保存 // 上传PDF return next();});又或者,在删除b原创 2017-06-18 18:56:32 · 316 阅读 · 0 评论 -
第7章-使用ORM类库Mongoose提升你的Node.js数据-7.2.Mongoose的原型
原型是一个JSON格式的类,这个类包含一些关于文档的类型、属性等的信息。 如果需要,他也可以存储一些验证信息和默认值。他还可以包含一些业务逻辑以及其他重要的信息。 换句话说,原型可以作为文档的蓝图。模型创建的时候需要原型(即:原型被发布为模型) 所以在我们使用模型的属性前,需要先定义他们的原型,例如,book原型中定义了字符串类型的name属性。var bookSchema = mo原创 2017-06-18 18:55:25 · 336 阅读 · 0 评论 -
第7章-使用ORM类库Mongoose提升你的Node.js数据-7.1.Mongoose的安装
Mongoose是一个基于Node.js和MongoDB的高级ORM类库。 使用ORM有很多优势,不只是利于组织代码或易于开发这么简单。 典型的ORM是现代软件工程至关重要的一部分。Mongoose能从数据库中提取出任何信息,且应用程序代码只能通过对象以及他们的方法进行交互。 ORM允许指定不同类型对象之间的关系,也允许将业务逻辑(与这些对象相关的)放入类中。另外,Mongoose拥原创 2017-06-18 18:54:11 · 577 阅读 · 0 评论 -
第6章-在Node.js应用中使用session和OAuth进行用户认证和授权
今年来,Web应用逐渐不再相互独立,安全性也日益重要。 作为开发者,我们不仅被鼓励使用市面上众多的第三方服务(如QQ、微信、微博等),也被希望作为服务商向外界提供服务(如提供API接口)。在这种情况下,我们需要使用某些手段来确保我们的应用以及应用间通信的安全,例如:基于token的用户认证、OAuth授权协议等。1、使用Express.js中间件实现权限管理 2、基于token的用户认证 3、原创 2017-06-06 22:43:01 · 520 阅读 · 0 评论 -
第5章-MongoDB、Mongoskin特性-5.5.Mongoskin的主要方法介绍
Mongoskin比MongoDB的原生驱动提供更好的API。像之前那样,在NPM上安装一个模块$npm install [email protected]和数据库的连接var mongoskin = require('mongoskin'), dbHost = '127.0.0.1', dbPort = 27017;var db = mongoskin.db(dbHost + ':' + db原创 2017-06-04 23:52:05 · 868 阅读 · 0 评论 -
第5章-MongoDB、Mongoskin特性-5.4.Node.js版原生MongoDB驱动示例
首先,先安装MongoDB的Node.js版原生驱动:$npm install [email protected]不要忘了包含package.json文件的依赖关系:{ "name": "node-example", "version": "0.0.1", "dependencies: { "mongodb": "1.3.23", ... }原创 2017-06-04 23:49:31 · 487 阅读 · 0 评论 -
第7章-使用ORM类库Mongoose提升你的Node.js数据-7.7.嵌套的文档
往NoSQL数据库中存储模型很适合使用嵌套的文档。 例如:我们可以使用一个单独的集合(users)代替两个集合(posts和users),这个单独集合中的每一项都包含posts决定是使用分开的集合还是嵌套的文档不止是一个代码结构的问题,这个问题的答案取决于用途。 例如:如果posts只是在users的上下文中用到,那么最好用嵌套的文档。 然而,如果博客里多个posts需要独立于他们的us原创 2017-06-18 18:58:37 · 499 阅读 · 0 评论 -
第7章-使用ORM类库Mongoose提升你的Node.js数据-7.8.虚拟字段
虚拟字段并不真实存在于数据库中,但是在Mongoose文档中和普通字段中扮演着同样的角色。 简单来讲,虚拟字段除了不会存入数据库外,其他方面和普通字段没有区别。一、用虚拟字段创建聚合字段是很不错对选择。例如:如果我们的系统需要有姓、名以及全名等字段(全名不过是姓和名连接起来),所以除了姓、名的值不需要再存储全名的值。 我们需要做的只是在虚拟字段里将姓和名连接起来。二、其他用原创 2017-06-18 18:59:00 · 573 阅读 · 0 评论 -
第7章-使用ORM类库Mongoose提升你的Node.js数据-7.9.修改原型的行为
Mongoose允许我们在原型中自定义一些方法,如:取值器(get)、赋值器(set)以及默认方法(default) 其他一些验证和一些有用的方法也都可以自定义。下面定义了一个set方法(当赋值时将他转换为小写格式)、get方法(当数字过千时,在千位后增加逗号)、default方法(生成全新的ObjectId对象),以及validate方法(当调用save()时触发次方法,检查是否为emai原创 2017-06-18 18:59:48 · 331 阅读 · 0 评论 -
第9章-WebSocket、Socket.IO和DerbyJS的实时应用程序-9.3.用DerbyJS,Express.js和MongoDB搭建一个在线协作的代码编辑器
Derby是一个新的,成熟的MVC框架,作为Express的中间件使用。 Express.js是使用中间件概念增强应用程序功能的一个流行的node框架。 Racer也支持Derby,他是一个数据同步引擎,类似Handlebars的模板引擎,拥有很多其他特性。 Meteor和Sails.js是另一个实时全栈Node.js的MVC框架,可与DerbyJS相媲美。 不过Meteor更保守些,他往原创 2017-06-18 19:05:30 · 808 阅读 · 0 评论 -
第9章-WebSocket、Socket.IO和DerbyJS的实时应用程序-9.2.Socket.IO和Express.js
大多数的实时Web应用程序中,服务器和客户端之间的通信发生在响应报文里,或者是对用户行为的响应,或者是从服务器获取数据更新的结果。安装Socket.IO $npm install [email protected] –save package.json文件$npm install{ "name": "socket-express", "version": "0.0.1",原创 2017-06-18 19:04:11 · 486 阅读 · 1 评论 -
第9章-WebSocket、Socket.IO和DerbyJS的实时应用程序-9.1.WebSocket、Socket.IO和DerbyJS的实时应用程序
实时应用程序:游戏,社交媒体,各种工具,服务和新闻HTML5的WebSocket开创了实时连接的新标准。 在服务器端,Node.js有一个高效、非阻塞的I/O平台,非常适合处理后端到浏览器JavaScript和WebSocket的任务。一、什么是WebSocket1.WebSocket是浏览器(客户端)和服务器之间的一种特殊的通信通道,他是一个HTML5协议。 2.WebSoc原创 2017-06-18 19:03:39 · 427 阅读 · 0 评论 -
第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.5.小结
REST API服务器和客户端(移动端、Web端、网页前端)之间这种松耦合的关系为程序提供了更佳的可维护性。 他是TDD/BDD的绝佳拍档。 另外,NoSQL数据库(例如:MongoDB)特别适合用于REST API,我们不需要为他定义复杂的模式,只需要把数据丢给他,他就会保存下来。原创 2017-06-18 19:03:18 · 391 阅读 · 0 评论 -
第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.4.重构:使用Hapi搭建REST API服务器
Hapi是一个企业级的框架。他比Express.js复杂,功能更加丰富,更适合大团队开发使用。由Walmart Labs的Eran Hammer维护。Hapi是一个框架,他的日志功能十分强大。 安装好Hapi后一、创建程序入口文件hapi-app.js//1.引入依赖模块var hapi = require('hapi'), mongoskin = require('原创 2017-06-18 19:02:45 · 632 阅读 · 0 评论 -
第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.3.使用Express和Mongoskin实现REST API服务器
创建index.js作为程序的入口文件 //1.引入依赖var express = require('express'), mongoskin = require('mongoskin'), bodyParser = require('body-parser'), logger = require('morgan')//2.创建一个服务器对象var app = e原创 2017-06-18 19:02:15 · 397 阅读 · 0 评论 -
第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.2.项目依赖
一、项目依赖现在开始我们的项目, 把依赖写入到package.json文件中{ "name": "rest-express", "version": "0.0.1", "description": "REST API application with Express, Mongoskin, MongoDB, Mocha and Superagent", "main":原创 2017-06-18 19:01:47 · 450 阅读 · 0 评论 -
第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.1.REST(表述性状态传递)Representational State Transfer
REST: 即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,原创 2017-06-18 19:01:13 · 439 阅读 · 0 评论 -
第7章-使用ORM类库Mongoose提升你的Node.js数据-7.10.Express.js+Mongoose=真正的MVC
为了避免在ORM中重建其他所有无关的组件,比如templates、routes以及forth,原创 2017-06-18 19:00:37 · 294 阅读 · 0 评论 -
第5章-MongoDB、Mongoskin特性-5.3.用控制台操作Mongo
在mongodb的bin目录输入如下命令: mongo,或者直接双击mongo.exe运行 如果已经将MongoDB的位置添加到了$PATH里,可以直接输入mongod如果看到:MongoDB starting: pid=7218 port=27017… 这意味着MongoDB数据库服务正在启动。默认监听http://localhost:27017。这是访问MongoDB脚本和应用的主机和端口原创 2017-06-04 23:37:08 · 398 阅读 · 0 评论 -
第5章-MongoDB、Mongoskin特性-5.2.简单且正确安装MongoDB
一、Windows下安装1、下载安装包:mongodb-win32-x86_64-2.6.6.zip解压如下: 2、创建目录D:\mongodb下建立data文件夹,然后在该data文件夹下分别建立db,log两个文件夹,至此mongodb下有以下文件夹 D:\mongodb\bin D:\mongodb\data\db D:\mongodb\data\log 在log目录下创建一个日志文原创 2017-06-04 23:34:43 · 378 阅读 · 0 评论 -
第5章-MongoDB、Mongoskin特性-5.1.NoSQL数据库
NoSQL数据库、也叫非关系数据库,其开源、水平扩展容易,适合用于分布式系统。NoSQL数据库比起传统数据库更适合处理大数据。实现的关键是数据库实体之间的关系并不存储在数据库本身(没有更多的查询);他们转移到了 应用层或者对象关系映射(ORM)水平–在这里,就是Node.js代码处理的部分。选用NoSQL的另一个理由是,他是无模式数据库,对于原型开发和敏捷迭代是近乎完美的(更加推荐)。MongoDB原创 2017-06-04 23:25:01 · 621 阅读 · 0 评论 -
第1章-安装Node.js及相关要点-1.5.Node.js读写文件
读写文件有异步操作和 同步操作;开发者应该使用异步方法:如fs.readFile1、读取文件var fs = require('fs);var path = require('path');fs.readFile(path.join(__dirname, '/data/customers.csv'), {encoding: 'utf-8'}, function (err, data){原创 2017-03-25 19:02:03 · 283 阅读 · 0 评论 -
第1章-安装Node.js及相关要点-1.4.Node.js的核心模块
同其他编程技术不同,Node.js并不包含非常冗余的标准库。他的核心模块是非常轻量级的,其他模块可以通过NPM来注册安装。主要的核心模块、类、方法和事件主要以下几个: 1.http 2.util 3.querystring 4.url 5.fs一、httphttp是Node.js从HTTP服务器获取相应内容的主要模块,他包含的主要方法如下: http.createServer():返回一原创 2017-03-25 18:59:37 · 342 阅读 · 0 评论 -
第1章-安装Node.js及相关要点-1.3.Node.js的全局变量和保留字
一、浏览器的JavaScript中,如果遗漏了var,变量就会变成全局变量,污染全局命名空间。二、浏览器的JavaScript中有window对象,但是在Node.js中却没有(显然我们不需要同浏览器窗口打交道),它为开发者提供了新的对象/关键字;1.process 2.global 3.module.exports 和 exports三、Node.js进程相关信息每个运行中的Node.js脚本原创 2017-03-25 18:56:42 · 535 阅读 · 0 评论 -
第1章-安装Node.js及相关要点-1.2.Node.js的基础和语法
Node.js建立在Google Chrome的V8引擎和他的ECMAScript之上。 1.弱类型 2.Buffer-Node.js特殊数据类型 3.对象字面量 4.函数 5.数组 6.原型特性 7.编码规范一、弱类型JavaScript的基本类型: 1.String 2.Number 3.Boolean 4.Undefined 5.Null原创 2017-03-25 18:41:21 · 304 阅读 · 0 评论 -
第1章-安装Node.js及相关要点-1.1.安装Node.js
一、Windows(X64) 到官网(https://nodejs.org/en/)下载安装包(v4.2.2长期支持版本,成熟可靠;v5.0.0稳定版本,最新特性),一路下一步安装 包含了NPM,Node的包管理器二、Mac OS X 通过HomeBrew或MacPorts安装 1.如果已经安装了HomeBrew(brew),可直接运行如下命令:$ brew install node$ b原创 2017-03-25 18:32:39 · 393 阅读 · 0 评论 -
第2章-使用Express.js4创建Node.js的Web应用程序-2.5.Jade模板
Jade模板引擎,能使开发者少写很多代码并且几乎支持所有JavaScript函数。 支持自顶向下(include)和自底向上(extend)方式来引入模块。 他和Ruby语言的Haml模板一样,将空格和缩进作为他语言的一部分,通常会用两个空格缩进Jade结构是每行第一个标记是HTML标签,后面是文本(就像inner text)如: h1 hello p Welcome to the J原创 2017-04-10 23:23:52 · 295 阅读 · 0 评论 -
第2章-使用Express.js4创建Node.js的Web应用程序-2.4.手动创建Express.js4中的Hello World例子
这次我们不使用生成器、高级模块和中间件来搭建Express.js的应用。一、手动创建流程1.创建文件夹 2.NPM初始化和配置package.json 3.依赖声明 4.app.js文件 5.结合Jade 6.运行应用二、创建文件夹1.node_modules:Express.js和第三方模块的依赖都在这个目录下 2.views:Jade或者其他模板引擎文件原创 2017-04-10 23:22:33 · 337 阅读 · 0 评论 -
第2章-使用Express.js4创建Node.js的Web应用程序-2.3.Express.js脚手架
一、为了生成一个基本的Express.js应用,我们需要执行命令express [options] [dir|appname]如: -e, --ejs:添加EJS引擎支持;默认情况下为Jade -H,--hogan:添加Hogan.js引擎支持 -c,--css:添加样式表支持模块,例如LESS、Stylus或者Compass(默认情况下,使用原生的CSS) -f,--force:强制原创 2017-04-10 23:20:40 · 351 阅读 · 0 评论 -
第2章-使用Express.js4创建Node.js的Web应用程序-2.2.Express.js的安装
Express.js的包有两种形式:1.express-generator:一个提供在命令行中快速搭建应用的全局NPM包 2.express:一个在Node.js应用中的node_modules文件夹里的本地模块包检查版本:$express -V安装:$npm install -g [email protected]卸载:$sudo npm uninstall -g原创 2017-04-10 23:20:02 · 282 阅读 · 0 评论 -
第1章-安装Node.js及相关要点-1.6.优化Node.js中的回调函数
CallBacks可以让Node.js代码异步执行,但是当不熟悉JavaScript的Java或者PHP开发人员看到回调Hell的Node.js代码时,肯定大吃一惊,fs.readdir(source, function(err, files){ if(err){ console.log('Error finding files:' + err); }else{原创 2017-03-25 19:03:30 · 272 阅读 · 0 评论 -
第1章-安装Node.js及相关要点-1.7.使用Node.js的HTTP模块来创建一个简单服务器
尽管Node.js可以用来完成很多不同的任务,但是他的主要任务还是用来创建Web应用。 Node.js能够在网络上繁荣发展,得益于他的异步特性和他的内置模块,如net和http。下面是一个Hello World的实例,在本例中,我们创建了server对象,定义了请求处理函数(函数有req和res两个参数),并把相关数据回传给接收者,最后启动hello.js文件来测试代码。var http = re原创 2017-03-25 19:05:18 · 315 阅读 · 0 评论 -
第1章-安装Node.js及相关要点-1.8.调试Node.js程序
Core Node.js Debugger:一个没有图形化用户接口(non-GUI)的精简工具,可以用在如何地方。 Node Inspector:Google Chrome开发者工具的接口 WebStorm和其他集成开发环境一、核心Node.js调试(Core Node.js Debugger)最好的调试器应该是console.log(),因为他不会中断执行过程,执行迅速并且信息量丰富。 然而原创 2017-03-25 19:07:10 · 418 阅读 · 0 评论 -
第4章-模板引擎Jade和Handlebars-4.6.Express.js中Jade和Handlebars的用法
默认情况下,Express.js 4.x 和 3.x可以使用提供给res.render方法的模板扩展,也可以使用通过view engine设置的默认扩展,去调用模板库里的require方法和__express方法。换句话说,Express.js是在外部实例化模板引擎库的,该库需要有__express方法。当模板引擎库不提供__express方法,也不提供有参数(path、options、cal原创 2017-05-06 22:31:04 · 689 阅读 · 0 评论 -
第4章-模板引擎Jade和Handlebars-4.5.单独使用Handlebars
可以通过NPM安装Handlebars,用命令$npm install handlebars 或$npm install handlebars --save.示例: handlebars-example.js文件如下:var handlebars = require('handlebars'), fs = require('fs');var data = { title: '原创 2017-05-06 22:30:43 · 490 阅读 · 0 评论 -
第4章-模板引擎Jade和Handlebars-4.4.Handlebars的语法
Handlebars库是另一个模板引擎。他继承自Mustache,所以大部分语法是兼容Mustance的。但Handlebars也新增了很多特性,比如superset。在设计上,Handlebars不同于Jade,他不允许在模板里写很多JavaScript逻辑,这有助于保持模板的简洁和严格相关的数据表示。Jade和Handlebars的另一个显著的不同是,Handlebars要求书写完整的原创 2017-05-06 22:30:04 · 611 阅读 · 0 评论