node



- node最大的特点是单线程,因此一个只能有一个任务运行,大量采用异步操作。
- 某一个任务的后续操作一般采用回调函数的形式
```
var callback = function (error, value) {
if (error) {
return console.log(error);
}
console.log(value);
}
```

全局对象

  • global:所在的环境,类似浏览器的window的对象
  • process:当前进程,指向Node内置的process模块,允许开发者与当前进程互动
  • console:指向Node内置的console模块,提供命令行环境中的标准输入、标准输出功能。
  • module:模块内部局部变量,所有模块都适用,看做半个全局变量。表示当前模块,module.exports变量表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量

全局变量

  • _filename:指向当前运行的脚本文件名
  • _dirname:指向当前运行的脚本所在的目录

全局函数

  • 定时器函数:共有4个,分别是setTimeout(), clearTimeout(), setInterval(), clearInterval()
  • require:用于加载模块

模块

核心模块

  • http:提供HTTP服务器功能
  • url:解析URL
  • fs:与文件系统交互
  • querystring:解析URL的查询字符串
  • child_process:新建子进程
  • util:提供一系列实用小工具
  • path:处理文件路径
  • crypto:提供加密和解密功能,基本上是对OpenSSL的包装

自定义模块

  • module.exports:对外输出模块接口
  • require:引用模块

.和..的区别##

  • 一个点:定位同一个文件夹下的另一文件
  • 两个点:不同文件夹路径下的文件
  • 没有:直接从根目录下开始


express框架



基于nodejs的web开发框架
express框架的核心是对nodejs中http模块的封装。在http模块上加了一个中间层,把http模块生成服务器等代码封装成相应api,直接调用。
## 中间件 ##
中间件是处理http请求的函数,完成各种任务。一个中间件处理完,再传递给下一个中间件。
```
function uselessMiddleware(req, res, next) {
next();
}
```
当一个HTTP请求进入服务器,服务器实例会调用第一个中间件(函数),完成后根据设置,决定是否再调用下一个中间件(函数)。
- req:http请求
- res:http回应
- next:传递到下一个中间件(函数)

express中调用中间件的方法:use

use是express调用中间件的方法,简单说,先匹配路由(可以直接匹配,也可以模式匹配),然后生成一个http服务器,调用一系列函数(又名中间件),完成一些操作。并且可以顺序调用其他中间件。

use方法的一些别名

  • all
  • get
  • post
  • put
  • del

requst对象

  • requst.ip:获得HTTP请求的IP地址
  • requst.file:获取上传的文件
  • request.params.id: 获取url中的id
  • request.body.
express.get('admin/update/:id',function(req,res){
var id=req.params.id;

response对象

  • response.redirect:网址的重定向
  • response.sendFile:用于发送文件
  • response.render:渲染网页
  • response.send:发送字符串

express设置:set

指定变量的值

app.set("views", __dirname + "/views");
app.set("view engine", "jade");



# MongoDB #


流行的noSQL数据库,专为nodejs开发。首先说明一下,noSQL可不是“not sql”的意思,而是“not only sql”!
用两种方式组织数据以及数据之间的关系:reference和embedded documents。
## reference ##
![](http://i.imgur.com/lTxLpF4.png)
reference类似于传统数据库模型中的外键,把各个表联系起来。
## embedded data ##
![](http://i.imgur.com/S5FhTpw.png)
这种方法就是noSQL数据库的独有部分了。它能在单一的一个文档结构存储相互关联的数据,隐形地储存了这些数据之间的关系。这样做的好处是可以一次查询获取所有数据。而传统的查询需要先通过查询username获取userid,然后在表contact和access通过userid查询对应数据。
## 示例1 ##
### 传统 ###
![](http://i.imgur.com/zfKoYzv.png)
假设要存储用户和用户地址,最简单的方法就是用户建一个表,用户地址建一个表。通过名字查询地址时,先查用户表找到用户id,然后通过用户id在地址表里查询地址。
### noSQL ###
![](http://i.imgur.com/ZEjlr6V.png)
和传统数据库模型不同,noSQL把用户和地址这种对应关系存在一个文档结构中,只需一次查询即可。
## 示例2 ##
当数据关系是一对多时?
### 传统 ###
![](http://i.imgur.com/m1gpJlw.png)
### noSQL ###
![](http://i.imgur.com/bwD14lZ.png)
同上分析,假设用户有多个地址,可以采用对象数组的方式存在用户表中,一次查询获得所有地址。
## 示例3 ##
根据上面的分析来看,是不是noSQL数据库中只需要一个数据表就能存储所有数据了呢?用传统的思维简直没法想象啊。看看下面的例子。
### noSQL ###
![](http://i.imgur.com/4p84AiD.png)
假设为出版社和图书建表。将出版社直接作为对象加在图书数据表后面。问题是:如果一个出版社出版了多本图书,那么会重复存储多遍出版社的信息,资源浪费。
此时,就可以为出版社也建立一个文档结构,用"reference"联系图书和出版社,如下:
### reference模式 ###
![](http://i.imgur.com/j26ekXQ.png)
其实还有一个问题,让图书号是出版社的reference,还是出版社是图书的reference?
这要看哪种方式存储的数据量小。如果一个出版社出版的图书数量众多,与其在出版社表里添加图书id,还不如在图书表里添加出版社id。反之亦然。


# MongoDB和nodejs的中间件:mongoose #

后续补充。。。

node.js相关的更多相关文章

  1. Node.js 相关资料网站汇总

    地址:https://cnodejs.org/ nodejs中文网:http://nodejs.cn/ nodejs中文网:http://www.nodejs.net/ 相关API地址:http:// ...

  2. Node.js相关——package概念及NPM

    1. package 包 CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具.CommonJS的包规范由 包结构 和 包描述文件 两个部分组成. 1.1 包结构 包实际上就 ...

  3. 汇智课堂 Node.js相关课程

    Node.js入门 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用· Node.js 借助事件驱动, 非阻塞I/O 模型 ...

  4. Node.js相关——CommonJS规范

    1. CommonJS规范产生背景 在后端,JavaScript的规范远远落后并且有很多缺陷,这使得难以使用JavaScript开发大型应用.比如: 没有模块系统 标准库较少 没有标准接口 缺乏包管理 ...

  5. Node.js 究竟是什么

    简而言之,Node.js是一个“编码就绪”服务器.Node是一个服务器端的JavaScript解释器,它将改变服务器如何工作的概念.是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同事连接到一 ...

  6. sublime快捷方式和node.js

    快捷方式具体见:http://blog.useasp.net/archive/2013/06/14/sublime-text-2-all-default-Shortcuts-table-on-wind ...

  7. Docker学习之——Node.js+MongoDB+Nginx环境搭建(一)

    最近在学习Node.js相关知识,在环境搭建上耗费了不少功夫,故此把这个过程写下来同大家分享一下,今天我先来介绍一下Docker,有很多人都写过相关知识,还有一些教程,在此我只想写一下,我的学习过程中 ...

  8. Node.js实战(五)之必备JavaScript基础

    阅读本章的话,个人觉得之前使用过JavaScript,完全轻松. Node.js的核心类型有:number.boolean.string以及object.另外两种类型分别是函数合数组,其实它们你可以理 ...

  9. node.js在2018年能继续火起来吗?我们来看看node.js的待遇情况

    你知道node.js是怎么火起来的吗?你知道node.js现在的平均工资是多少吗?你知道node.js在2018年还能继续火吗?都不知道?那就来看文章吧,多学点node.js,说不定以后的你工资就会高 ...

随机推荐

  1. 反编译工具 使用.NET JustDecompile来反编译你的程序代码

    原文地址:http://www.it165.net/pro/html/201310/7383.html 前言 在项目的进行中有时会碰到需要去了解由第三方所开发的程序代码或者因为年久已经遗失原始码的程序 ...

  2. Jquery操作select、checkbox、radio详细讲解

    一 .Select jQuery获取Select选择的Text和Value: 1. $("#select_id").change(function(){//code...}); / ...

  3. Java学习路线图·影响一代又一代程序员的经典书籍!(转)

    转自:http://www.douban.com/group/topic/50353428/ 基础篇 ·Java核心技术 卷1 基础知识(原书第9版)最新版·中文版 第13届Jolt生产效率大奖获奖图 ...

  4. POJ1505:Copying Books(区间DP)

    Description Before the invention of book-printing, it was very hard to make a copy of a book. All th ...

  5. 日积月累:ProguardGui进行jar包代码混淆

    前面文章<Proguard进行源代码混淆>讲解过怎么使用Proguard工具对Android的源代码进行混淆的方法(感兴趣的朋友可以访问:http://blog.csdn.net/p106 ...

  6. jboss7 加载module过程

    1. 调试类: org.jboss.as.server.Main的main方法 断点: Module.registerURLStreamHandlerFactoryModule(Module.getB ...

  7. sass笔记-3|Sass基础语法之样式复用和保持简洁

    上一篇详述了Sass如何嵌套.导入和注释这3个基本方式来保持条理性和可读性,这一篇更进一步地阐述sass保持样式复用和简洁的方式--混合器和选择器继承--这两种方式都能复用样式,使用它们也不难,但一定 ...

  8. hdu 5108

    //题意是给一个数N,然后让你求M,使得N/M为素数,并且M的值最小 //思路呢,大概有两种,一个是遍历素数求解的,不过数据太大不现实 //另外一种就是质因数求解,for循环是遍历质因数,然后whil ...

  9. setTimeout()与setInterval()方法区别介绍

    计时器setTimeout()和setInterval()两个都是js的计时功能的函数两个有些区别,下面为大家简单介绍下,希望对大家有所帮助   计时器setTimeout()和setInterval ...

  10. ods_yx给用户分配表空间、权限用户等工作内容。

    1.登陆运维审计 huang_cb.bl hac12345 2.找到81.35   root-admin  nwsj*2013 3.打开oracle EMC工具,使用ods_yx用户登陆进EMC里面的 ...