Node.js笔记

什么是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.js
function hello(){
    this.sayHello = function(){
        console.log('hello');
    }
}
module.exports = hello;

// main.js
var Hello = require('./hello.js');
var h = new Hello();
h.sayHello();

node main.js //运行,结果:控制台打印“hello”

路由

// http.js
var 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.js
function router(path, res) {
    if (path === '/') {
        res.end('首页');
    } else if (path === '/user') {
        res.end('用户中心');
    } else {
        res.end('404');
    }
}

exports.router = router;

// main.js
var http = require('./http');
var router = require('./router.js');

http.start(router.router);

// 运行
node main.js
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值