nodejs入门教程一:概念与用法简介


Posted in NodeJs onApril 24, 2017

本文实例讲述了nodejs概念与用法。分享给大家供大家参考,具体如下:

一. nodejs 的特点

1.nodejs 是一个javaScript 的运行平台,采用了Google Chrome浏览器的V8引擎。

2.拥有事件驱动:当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。

示例:点餐

在基于线程的方式中(thread-based way):收银员接待你点餐开始,收银员不能接待下一个人,直到你拿到食物离开。

现实中是这样,(基于事件驱动方式)只要你把点餐单给收银员,他给你一个号,你就坐着等,收银员开始接待下一个客户。如果你的食物准备好了,就呼叫你的号码让你去柜台取。关键的一点是,你没有阻塞下一个客户的订餐请求。呼叫你取餐,在编程领域,我们称为回调(callback function)。

3.异步编程,单线程:高并发时,更加灵活,非阻塞,性能好。

二. npm 命令

npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。有了npm,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。

1、npm install moduleNames:安装Node模块

安装完毕后会产生一个node_modules目录,其目录下就是安装的各个node模块。

node的安装分为全局模式和本地模式。

一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地node_modules目录下。

在全局模式下,Node包会被安装到Node的安装目录下的node_modules下。

全局安装命令为:

$npm install -g moduleName

获知使用:

$npm set global=true

来设定安装模式。

使用:

$npm get global

可以查看当前使用的安装模式。

示例:

npm install express

默认会安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install express@3.0.6

npm install <name> -g

将包安装到全局环境中

但是代码中,直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令

npm install <name> --save

安装的同时,将信息写入package.json中,项目路径中如果有package.json文件,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包,这样代码提交到github时,就不用提交node_modules这个文件夹了。

2、npm view moduleNames:查看node模块的package.json文件夹
注意事项:如果想要查看package.json文件夹下某个标签的内容,可以使用$npm view moduleName labelName

3、npm list:查看当前目录下已安装的node包
注意事项:Node模块搜索是从代码执行的当前目录开始的,搜索结果取决于当前使用的目录中的node_modules下的内容。$ npm list parseable=true可以目录的形式来展现当前安装的所有node包

4、npm help:查看帮助命令

5、npm view moudleName dependencies:查看包的依赖关系

6、npm view moduleName repository.url:查看包的源文件地址

7、npm view moduleName engines:查看包所依赖的Node的版本

8、npm help folders:查看npm使用的所有文件夹

9、npm rebuild moduleName:用于更改包内容后进行重建

10、npm outdated:检查包是否已经过时,此命令会列出所有已经过时的包,可以及时进行包的更新

11、npm update moduleName:更新node模块

12、npm uninstall moudleName:卸载node模块

13、一个npm包是包含了package.json的文件夹,package.json描述了这个文件夹的结构。访问npm的json文件夹的方法如下:

$ npm help json

此命令会以默认的方式打开一个网页,如果更改了默认打开程序则可能不会以网页的形式打开。

14、发布一个npm包的时候,需要检验某个包名是否已存在

$ npm search packageName

15、npm init:会引导你创建一个package.json文件,包括名称、版本、作者这些信息等

16、npm root:查看当前包的安装路径
npm root -g:查看全局的包的安装路径

17、npm -v:查看npm安装的版本

18、npm prune -x:将会移除package.json中没有列举的node_modules的包,当执行 npm list 报 err 时,就可以使用该命令。

19、npm -g install npm@x.xx.xx : 升级(降级)npm,然后复制 C:\Users\你的windows用户名\AppData\Roaming\npm\node_modules\npm下的所有文件到你的Nodejs安装目录的 \nodejs\node_modules\npm 中,替换掉所有所有的文件。

三. nodejs exports、module.exports 与require() 结合使用

每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {},只有通过exports或module.exports将其暴露出去,外部才能通过require() 进行访问。

① module.exports 初始值为一个空对象 {}
② exports 是指向的 module.exports 的引用
③ require() 返回的是 module.exports 而不是 exports
④ 综上,可以说 exports 是给 module.exports 添加属性和方法!!!

示例:fool.js

exports.a = function(){
  console.log('a')
}
exports.a = 1;
module.exports = {a: 2};
exports.a = 3;

执行 test.js

var c = require('./fool'); //require() 返回的是 module.exports 而不是 exports
console.log(c.a);//2

他们之间的关系就像:

var a = new Object();//a相当于module.exports
var b = a; //b相当于exports

5.在深入一点:exports返回的是一个json对象,而module.exports可以返回任何形式的数据格式,例如数组,字符串,数字等类型时,我们必须要用module.exports

//test.js
module.exports = '我是module.exports暴露的字符串';
exports.name = '我是exports暴露的name';
exports.method = function(){
  console.log('我是exports暴露的method');
};
console.log("我是console.log(exports)的结果:");
console.log(exports);
console.log();
//fool.js
var obj = require('./test.js');
console.log("我是console.log(module.exports)的结果:");
console.log(module.exports);
console.log();
console.log("我是console.log(obj)的结果:");
console.log(obj);//require() 返回的是 module.exports 而不是 exports

执行 fool.js :

我是console.log(exports)的结果:
{ name: '我是exports暴露的name', method: [Function] }
我是console.log(module.exports)的结果:
{}
我是console.log(obj)的结果:
我是module.exports暴露的字符串

希望本文所述对大家nodejs程序设计有所帮助。

NodeJs 相关文章推荐
nodejs之请求路由概述
Jul 05 NodeJs
基于 Docker 开发 NodeJS 应用
Jul 30 NodeJs
基于NodeJS的前后端分离的思考与实践(五)多终端适配
Sep 26 NodeJs
浅析nodejs实现Websocket的数据接收与发送
Nov 19 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
NodeJS整合银联网关支付(DEMO)
Nov 09 NodeJs
详解nodejs中的process进程
Mar 19 NodeJs
Nodejs搭建wss服务器教程
May 24 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
nodejs提示:cross-device link not permitted, rename错误的解决方法
Jun 10 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 #NodeJs
详解如何在NodeJS项目中优雅的使用ES6
Apr 22 #NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 #NodeJs
解析NodeJS异步I/O的实现
Apr 13 #NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 #NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 #NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 #NodeJs
You might like
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
设置cookie指定时间失效(实例代码)
2017/05/28 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
python with提前退出遇到的坑与解决方案
2018/01/05 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
什么是组件架构
2016/05/15 面试题
岗位说明书范文
2014/05/07 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
python turtle绘图命令及案例
2021/11/23 Python
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js