Node.js笔记

来源:互联网 发布:js通过id获取div 编辑:程序博客网 时间:2024/04/24 01:52

什么是Node.js

是使用了V8引擎,运行在服务端,能解析js的程序。

优势

  • 脱离浏览器的执行环境
  • 提供高性能的web服务
  • IO性能强大
  • 事件处理机制完善
  • 天然处理DOM
  • 社区活跃,生态圈完善
  • 处理大流量数据,异步处理大量并发连接
  • 适合实时交互的应用
  • 完美支持对象数据

安装

官网:https://nodejs.org/en/download/
中文网:http://nodejs.cn/download/
淘宝镜像:https://npm.taobao.org/mirrors/node

本文以window为例,安装的是 msi 文件。

node -v // 下载相关文件,安装后,查看版本来判断是否安装了

NPM 内置的包管理器

从NPM服务器下载第三方包,如gulp、webpack、vue等等
npm 常用命令

npm install 模块 -g // 全局安装npm install 模块 // 安装好后不写入package.json中npm install 模块 --save // 安装好后写入package.json的dependencies中(生产环境依赖)npm install 模块 --save-dev // 安装好后写入package.json的devDepencies中(开发环境依赖)npm uninstall 模块 // 全局卸载npm uninstall 模块:删除模块,但不删除模块留在package.json中的对应信息npm uninstall 模块 // --save 删除模块,同时删除模块留在package.json中dependencies下的对应信息npm uninstall 模块 --save-dev // 删除模块,同时删除模块留在package.json中devDependencies下的对应信息

有时使用npm安装包会比较慢,可以用淘宝的的 NPM 镜像,cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org //安装cnpm

Hello World

// helloworld.js 使用 http 模块提供服务var http = require('http');http.createServer(function(req, res){    // 发送相应数据    res.end('hello world!\n');}).listen(8000);//服务运行后输出一行信息console.log('server is running...');
node helloworld.js // 在 helloworld.js 所在目录打开命令提示符,启动服务,用浏览器打开 http://localhost:8000 体验吧

阻塞与非阻塞

程序等待调用结果(消息、返回值)的状态。阻塞则是拿到结果才继续往下执行,而非阻塞则是继续做其他事,等结果拿到后通过回调来响应处理。

// 阻塞代码var fs = require('fs');var data = fs.readFileSync('data.txt'); // 同步读取console.log(data.toString());console.log('hei');
// 非阻塞代码var fs = require('fs');var data = fs.readFile('data.txt', function(err, data){    if(err){        return console.error(err);    }    console.log(data.toString());});console.log('没等待文件读取完毕,就执行到这了');

事件

var connctHandler = function connected(){    console.log('connected')}eventEmitter.on('connection', connctHandler); // 绑定事件处理函数// 触发事件eventEmitter.emit('connection');

模块化

模块是 Node.js 应用程序的基本组成部分。
文件和模块意义对应,一个文件对应一个模块 。
模块分为:原生模块、文件模块
模块加载方式:从文件模块缓存中加载、从原生模块找、从文件模块找
这里写图片描述

// 模块案例// hello.jsfunction hello(){    this.sayHello = function(){        console.log('hello');    }}module.exports = hello;// main.jsvar Hello = require('./hello.js');var h = new Hello();h.sayHello();node main.js //运行,结果:控制台打印“hello”

路由

// http.jsvar http = require('http');var url = require('url');function start (router) {    function req (req, res) {        var path = url.parse(req.url).pathname;        router(path, res);    }    http.createServer(req).listen(8888);    console.log('Server start');}exports.start = start;// router.jsfunction router(path, res) {    if (path === '/') {        res.end('首页');    } else if (path === '/user') {        res.end('用户中心');    } else {        res.end('404');    }}exports.router = router;// main.jsvar http = require('./http');var router = require('./router.js');http.start(router.router);// 运行node main.js