一、Nodejs介绍

简单的说 Node.js 就是运行在服务端的 JavaScript的代码解析器。

首先要清楚Node不是一个Web服务器,这十分重要。它本身并不能做任何事情。它无法像Apache那样工作。如果你希望它成为一个HTTP服务器,你必须借助它内置库自己编写。Node.js只是计算机上执行代码的另一种方式,它是一个简单的JavaScript Runtime.

Node.js把 JavaScript 的使用从浏览器端扩展到了服务器端,使得前端开发人员可以用熟悉的语言编写服务器端代码。这一变化使得 NodeJS 很快就流行起来。在 NodeJS 社区中有非常多的高质量模块可以直接使用。

官网介绍:

Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的、可扩展的网络应用。Node.js采用事件驱动和非阻塞I/O模型,使其变得轻量和高效,非常适合构建运行在 分布式设备的数据密集型的实时应用。

1、node.js是一个平台,或者说是一个运行环境。

2、node.js是一个基于Chrome JavaScript 运行时建立的一个平台,具体是基于 Chrome V8 引擎,V8引擎执行Javascript的速度非常快,性能非常好。

3、node.js旨在提供一种简单的构建 快速、可伸缩网络程序的方法。

4、使用数据驱动,非阻塞IO模型

5、轻量、可伸缩,适用于实时数据密集的交互应用。

6. 单进程,单线程

运行于浏览器的JavaScript,浏览器就是JavaScript代码的解析器,而Node.js则是服务器端JavaScript的代码解析器,存在于服务器端的JavaScript代码由Node.js来解析和运行。

JavaScript解析器只是JavaScript代码运行的一种环境,浏览器是JavaScript运行的一种环境,浏览器为JavaScript提 供了操作DOM对象和window对象等的接口。Node.js也是JavaScript运行的一种环境,Node.js为JavaScript提供了操 作文件、创建HTTP服务、 创建TCP/UDP服务等的接口,所以Node.js可以完成其他后台语言(Python、PHP等)能完成的工作。

二、执行环境

Node.j提供了一个交互式运行环境REPL,通过这个环境,可以立即执行javascript代码块,使用方法类似Chrome浏览器中Firebug插件的Console。

输入node或node.js进入node.js的交互式运行环境。ctrl+d退出。

1、通过交互式环境执行javascritp代码块

$ node
> console.log('liuxiaoyan');

2、通过交互式环境运行javascript文件

$ node test.js

三、node.js模块和包

1、模块

一个模块就是一个文件。

每一个Node.js都是一个Node.js模块,包括JavaScript文件(.js)、JSON文本文件(.json)和二进制模块文件(.node)。

node.js官方提供了很多模块,这些模块分别实现特定功能,如操作文件的模块fs,构建http服务的模块http。

可以用官方的模块,也可以自己写。

2、包

包是一个文件夹,将多个具有依赖关系的模块组织在一起,封装多个模块,方便管理。

Node.js才有CommonJS规范,包内必须包含一个JSON文件,命名为package.json。

package.json应该包含以下字段:

name:包名。包名是唯一的,只能包含小写字母、数字和下划线。
version:包版本号。
description:包说明。
keywords:关键字数组。用于搜索。
homepage:项目主页。
bugs:提交bug的地址。
license:许可证。
maintainers:维护者数组。
contributors:贡献者数组。
repositories:项目仓库托管地址数组。
dependencies:包依赖。

示例:

{
"name": "shiyanlou",
"description": "Shiyanlou test package.",
"version": "0.1.0",
"keywords": [
"shiyanlou",
"nodejs"
],
"maintainers": [{
"name": "test",
"email": "test@shiyanlou.com"
}],
"contributors": [{
"name": "test",
"web": "http://www.shiyanlou.com/"
}],
"bugs": {
"mail": "test@shiyanlou.com",
"web": "http://www.shiyanlou.com/"
},
"licenses": [{
"type": "Apache License v2",
"url": "http://www.apache.org/licenses/apache2.html"
}],
"repositories": [{
"type": "git",
"url": "http://github.com/test/test.git"
}],
"dependencies": {
"webkit": "1.2",
"ssl": {
"gnutls": ["1.0", "2.0"],
"openssl": "0.9.8"
}
}
}

bin文件夹存放二进制文件。

lib文件夹存放javascript文件。

doc文件夹存放文档。

test文件夹存放单元测试。

3、npm包管理工具

npm是node.js的包管理工具,npm定义了包依赖关系标准,npm主要用来下载管理第三方包。

常用命令如下:

搜索第三方包:

$ sudo npm search express

安装包:

$ sudo npm install -g express

更新包:

$ sudo npm update express

卸载包:

$ sudo npm uninstall express

四、模块的

1、模块的分类和引用

文件路径,模块名,用模块名来引用非核心模块的话,nodejs最后会把模块名映射到对应的模块文件的路径。

核心模块在node启动时会被预先加载。

2、模块的写法和调用

重点是了解下模块的流程:创建模块、导出模块、加载模块和使用模块。

1、写法1和调用方法1

mymodule.js代码如下,通过module.exports和exports对外提供接口。

function hello() {
console.log('Hello');
} function world() {
console.log('World');
} exports.hello = hello;
exports.world = world;

在index.js中调用

var hello = require('./mymodule'); // 也可以写作 var hello = require('./mymodule.js');

// 现在就可以使用mymodule.js中的函数了
hello.hello(); // >> Hello
hello.world(); // >> World

2、写法2和调用方法2

function Hello() {
this.hello = function() {
console.log('Hello');
}; this.world = function() {
console.log('World');
};
} module.exports = Hello;

在index.js中调用

var Hello = require('./mymodule');

var hello = new Hello();

hello.hello(); // >> Hello
hello.world(); // >> World

五、module.exports和exports

module是以对象,每个模块都有一个module对象,module是当前模块的一引用。

module.exports对象是Module系统创建的,而exports可以看作是对module.exports对象的一个引用。

在模块中require另一模块时,以module.exports的值为准,因为有的情况,module.exports和exports它们的值是不同的。

// module.exports和exports相同的情况
var m = {}; // 表示 module
var e = m.e = {}; // e 表示 exports, m.e 表示 module.exports m.e.a = 5;
e.b = 6; console.log(m.e); // Object { a: 5, b: 6 }
console.log(e); // Object { a: 5, b: 6 }
// module.exports和exports不同的情况
var m = {}; // 表示 module
var e = m.e = {}; // e 表示 exports, m.e 表示 module.exports m.e = { c: 9 }; // m.e(module.exports)引用的对象被改了
e.d = 10; console.log(m.e); // Object { c: 9 }
console.log(e); // Object { d: 10 }

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/5035208.html有问题欢迎与我讨论,共同进步。

参考:

http://www.xprogrammer.com/159.html

http://nodeschool.io/zh-cn/

nodejs入门的更多相关文章

  1. nodeJs 5.0.0 安装配置与nodeJs入门例子学习

    新手学习笔记,高手请自动略过 安装可以先看这篇:http://blog.csdn.net/bushizhuanjia/article/details/7915017 1.首先到官网去下载exe,或者m ...

  2. NodeJS入门(四)—— path对象

    很快Node就会迎来4.0的时代,届时将并入现有的iojs,所以先前写过的iojs入门系列直接更名为NodeJS入门. 本篇开始将逐个介绍Node的各主要模块,依循API文档走一遍,但会给出比API文 ...

  3. 01.Nodejs入门之Helloworld

    说明:本文章可供有一定js基础的朋友参考nodejs入门,本文未讲解nodejs的安装,如有需要的同学可以加QQ3382260752找我,进行交流学习. 1.新建文件夹helloworld demo, ...

  4. NodeJS入门简介

    NodeJS入门简介 二.模块 在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分. const http = require ...

  5. nodejs入门教程之http的get和request简介及应用

    nodejs入门教程之http的get和request简介及应用 前言 上一篇文章,我介绍了nodejs的几个常用的模块及简单的案例,今天我们再来重点看一下nodejs的http模块,关于http模块 ...

  6. 57.NodeJS入门--环境搭建 IntelliJ IDEA

    转自:https://blog.csdn.net/wang19891106/article/details/51127133 NodeJS入门–环境搭建 IntelliJ IDEA 本人也刚开始学习N ...

  7. 二、NodeJS入门——准备工作(2)——MongoDB安装以及客户端Robomongo安装和使用

    目录     1.介绍     2.下载地址     3.MongoDB安装过程     4.MongoDB的使用     5.MongoDB添加管理员账户     6.RoboMongo安装过程   ...

  8. NodeJS入门--环境搭建 IntelliJ IDEA

    NodeJS入门–环境搭建 IntelliJ IDEA 本人也刚开始学习NodeJS,所以以此做个笔记,欢迎大家提出意见. 1.首先 下载安装NodeJS,下载安装IntelliJ IDEA 2.接下 ...

  9. Nodejs入门-基于Node.js的简单应用

    服务端JavaScript 众所周知的,JavaScript是运行在浏览器的脚本语言,JavaScript通常作为客户端程序设计语言使用,以JavaScript写出的程序常在用户的浏览器上运行.直至N ...

  10. Nodejs入门手记 (01):Hello World的WEB程序

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Allong,谢谢! “滚滚长江东逝水,浪花淘尽英雄.是非成败转头空.” - <临江仙·杨慎·明> 很熟悉的旋律,鸡汤了一下:高考是 ...

随机推荐

  1. web桌面程序之锁屏功能分析

    这是一个在操作系统里比较常见的功能,但在web里实现,有哪些需要注意的呢? 1.如何真正的实现锁屏? 2.如何避免通过技术手段绕过锁屏? 我个人总结出2点需要特别注意的地方,下面就分别进行分析. 第一 ...

  2. C# 如何实现带消息数的App图标

    上次写了一篇博文,但是每次更新图标时,桌面会闪烁(刷新),有博友说人家的图标都不会刷新,还能动画.我想了一下,如果要达到这个效果,可以用Form来实现,就是在Form中嵌入一个图片,然后用一个labe ...

  3. 关于处理addGiftmoneyAction接口报错问题的总结

    昨天UniUser中AddGiftmoneyAction接口在被调用时抛出异常,曾哥让我来解决这个问题,虽然最后查出是路径问题,但是由于解决问题 的思路不够清晰,导致浪费了大量的时间和精力,也没有给出 ...

  4. [deviceone开发]-do_FrameAnimtionView的简单动画示例

    一.简介 do_FrameAnimtionView组件是用加载GIF动态图片和加载一系列图片形成动画效果的展示组件,这个示例直观的展示组件基本的使用方式.适合初学者. 二.效果图 三.相关下载 htt ...

  5. mongodb 查询的用法

    想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动.C#版的驱动貌似有很多种,如官方提供的samus. 实现思路大都类似.这里我们用官方提供的mongo-csharp-dri ...

  6. chrome developer tool—— 断点调试篇

    断点,调试器的功能之一,可以让程序中断在需要的地方,从而方便其分析.也可以在一次调试中设置断点,下一次只需让程序自动运行到设置断点位置,便可在上次设置断点的位置中断下来,极大的方便了操作,同时节省了时 ...

  7. Websphere 系列的https证书的配置说明

    术语解释 v IHS IBM HTTP Server v WP Websphere portal v WAS Websphere Application Server 系统安装 WAS6.1 安装了例 ...

  8. JavaScript学习09 函数本质及Function对象深入探索

    JavaScript学习09 函数本质及Function对象深入探索 在JavaScript中,函数function就是对象. JS中没有方法重载 在JavaScript中,没有方法(函数)重载的概念 ...

  9. Android java传递int类型数据给C

    本文根据<Android jni简便开发流程>中的开发流程来实现一个java传递int类型数据给C 新建项目,进行简单的布局 <LinearLayout xmlns:android= ...

  10. DNS劫持解决方法

    刚在家上网,发自己的浏览器竟然还会弹出页面广告(我浏览器装了屏蔽广告的浏览器应用,理论上就不会出现什么弹出来的广告). 于是自己仔细研究了下,发现在易迅的页面竟然嵌套了一个iframe,首先易迅肯定不 ...