• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
Node.js(2)使用

 

使用1 创建一个服务器

 

 

 2server.js

//require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http
var http = require("http");

// http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口
// 函数通过 request, response 参数来接收和响应数据

http.createServer(function (request, response) {

    // 发送 HTTP 头部 
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});

    // 发送响应数据 "Hello World"
    response.end('Hello World\n');
}).listen(8888);

// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

 

分析Node.js 的 HTTP 服务器:

  • 第一行请求(require)Node.js 自带的 http 模块,并且把它赋值给 http 变量。
  • 接下来我们调用 http 模块提供的函数: createServer 。这个函数会返回 一个对象,这个对象有一个叫做 listen 的方法,这个方法有一个数值参数, 指定这个 HTTP 服务器监听的端口号。

在工程目录,按住Shift+右键,选择在当前文件目录打开命令行

 

 

 执行 

node server.js

 

 

运行之后访问网页

 

 

 

 

教程2 使用 npm安装包

全局安装与本地安装

npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如



本地安装

npm install express          # 本地安装
  • 1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
  • 2. 可以通过 require() 来引入本地安装的包。


全局安装

npm install express -g   # 全局安装
  • 1. 将安装包放在 /usr/local 下或者你 node 的安装目录。
  • 2. 可以直接在命令行里使用。

如果你希望具备两者功能,则需要在两个地方安装它或使用 npm link。

 

    以下实例,我们使用 npm 命令安装常用的 Node.js web框架模块 express:

   

npm install express

  

安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require('express') 的方式就好,无需指定第三方包路径。

 

Package.json 属性说明

package.json 位于模块的目录下,用于定义包的属性。接下来让我们来看下 express 包的 package.json 文件

  1. name - 包名。

  2. version - 包的版本号。

  3. description - 包的描述。

  4. homepage - 包的官网 url 。

  5. author - 包的作者姓名。

  6. contributors - 包的其他贡献者姓名。

  7. dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。

  8. repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。

  9. main - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。

  10. keywords - 关键字

 

教程3读取txt同步和异步

 


 

阻塞代码实例

创建一个文件 input.txt ,内容如下:


菜鸟教程官网地址:www.runoob.com

  创建 main.js 文件, 代码如下:


var fs = require("fs");

var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("程序执行结束!");
以上代码执行结果如下:

 

$ node main.js
菜鸟教程官网地址:www.runoob.com

程序执行结束!

  

非阻塞代码实例

创建一个文件 input.txt ,内容如下:

 

菜鸟教程官网地址:www.runoob.com

  创建 main.js 文件, 代码如下:


var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序执行结束!");

  以上代码执行结果如下:

 
$ node main.js
程序执行结束!
菜鸟教程官网地址:www.runoob.com

 

 

教程4 事件循环

Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。

Node.js 几乎每一个 API 都是支持回调函数的。

Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。

Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该

事件驱动程序

Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。

当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。

这个模型非常高效可扩展性非常强,因为 webserver 一直接受请求而不等待任何读写操作。(这也称之为非阻塞式IO或者事件驱动IO)

在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。

 

实例

创建 main.js 文件,代码如下所示:

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
 
// 函数1定义 创建事件处理程序
var connectHandler = function connected() {
   console.log('连接成功。');
}
 
// 绑定函数1 connection 事件处理程序
eventEmitter.on('connection', connectHandler);
 
// 绑定函数2和函数2定义 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
   console.log('数据接收成功。');
});
 
// 触发函数1 connection 事件 
eventEmitter.emit('connection');
// 触发函数 data_received 事件 
eventEmitter.emit('data_received');

console.log("程序执行完毕。");

  

 

 

$ node main.js
连接成功。
数据接收成功。
程序执行完毕。

  

 

posted on 2020-10-29 11:06  MKT-porter  阅读(138)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3