Node.js入门

Download node.js eBook

备注

Node.js是一个基于事件的非阻塞异步I / O框架,它使用Google的V8 JavaScript引擎。它用于开发大量使用在客户端和服务器端运行JavaScript的应用程序的应用程序,因此可以从代码的可重用性和缺少上下文切换中受益。它是开源和跨平台的。 Node.js应用程序是用纯JavaScript编写的,可以在Windows,Linux等的Node.js环境中运行......

版本

发布日期
v8.2.1 二零一七年七月二十零日
V8.2.0 2017年7月19日
V8.1.4 2017年7月11日
v8.1.3 2017年6月29日
V8.1.2 2017年6月15日
v8.1.1 2017年6月13日
V8.1.0 2017年6月8日
V8.0.0 2017年5月30日
V7.10.0 2017年5月2日
V7.9.0 2017年4月11日
v7.8.0 2017年3月29日
v7.7.4 2017年3月21日
v7.7.3 2017年3月14日
v7.7.2 2017年3月8日
v7.7.1 2017年3月2日
v7.7.0 2017年2月28日
v7.6.0 2017年2月21日
V7.5.0 2017年1月31日
V7.4.0 2017年1月4日
V7.3.0 2016年12月20日
v7.2.1 2016年12月6日
V7.2.0 2016年11月22日
V7.1.0 2016年11月8日
7.0.0 2016年10月25日
v6.11.0 2017年6月6日
v6.10.3 2017年5月2日
v6.10.2 2017年4月4日
v6.10.1 2017年3月21日
v6.10.0 2017年2月21日
v6.9.5 2017年1月31日
v6.9.4 2017年1月5日
v6.9.3 2017年1月5日
v6.9.2 2016年12月6日
v6.9.1 2016年10月19日
v6.9.0 2016年10月18日
v6.8.1 二〇一六年十月十四日
v6.8.0添二零一六年十月一十二日
v6.7.0 2016年9月27日
V6.6.0 2016年9月14日
V6.5.0 2016年8月26日
V6.4.0 2016年8月12日
v6.3.1 2016年7月21日
v6.3.0 2016年7月6日
V6.2.2 2016年6月16日
V6.2.1 2016年6月2日
V6.2.0 2016年5月17日
V6.1.0 2016年5月5日
V6.0.0 2016年4月26日
v5.12.0 2016年6月23日
v5.11.1 2016年5月5日
v5.11.0 2016年4月21日
v5.10.1 2016年4月5日
V5.10 2016年4月1日
V5.9 2016年3月16日
V5.8 2016年3月9日
V5.7 2016年2月23日
V5.6 2016年2月9日
V5.5 2016年1月21日
V5.4 2016年1月6日
V5.3 2015年12月15日
V5.2 2015年12月9日
V5.1 二〇一五年十一月十七日
V5.0 2015年10月29日
V4.4 2016年3月8日
V4.3 2016年2月9日
V4.2 2015年10月12日
V4.1 2015年9月17日
V4.0 2015-09-08
io.js v3.3 2015年9月2日
io.js v3.2 2015年8月25日
io.js v3.1 2015年8月19日
io.js v3.0 2015年8月4日
io.js v2.5 2015年7月28日
io.js v2.4 2015年7月17日
io.js v2.3 2015年6月13日
io.js v2.2 2015年6月1日
io.js v2.1 2015年5月24日
io.js v2.0 2015年5月4日
io.js v1.8 2015年4月21日
io.js v1.7 2015年4月17日
io.js v1.6 2015年3月20日
io.js v1.5 2015年3月6日
io.js v1.4 2015年2月27日
io.js v1.3 二零一五年二月二十零日
io.js v1.2 2015年2月11日
io.js v1.1 2015年2月3日
io.js v1.0 2015年1月14日
v0.12 2016年2月9日
v0.11 2013年3月28日
v0.10 2013年3月11日
V0.9 2012-07-20
V0.8 2012-06-22
V0.7 2012-01-17
V0.6 2011-11-04
V0.5 2011-08-26
V0.4 2011-08-26
V0.3 2011-08-26
V0.2 2011-08-26
V0.1 2011-08-26

Hello World HTTP服务器

首先,为您的平台安装Node.js.

在这个例子中,我们将创建一个侦听端口1337的HTTP服务器,它发送Hello, World! 到浏览器。请注意,您可以使用当前未被任何其他服务使用的任何您选择的端口号,而不是使用端口1337。

http 模块是Node.js 核心模块 (Node.js源中包含的模块,不需要安装其他资源)。 http 模块提供使用http.createServer() 方法创建HTTP服务器的功能。要创建应用程序,请创建包含以下JavaScript代码的文件。

const http = require('http'); // Loads the http module

http.createServer((request, response) => {

    // 1. Tell the browser everything is OK (Status code 200), and the data is in plain text
    response.writeHead(200, {
        'Content-Type': 'text/plain'
    });

    // 2. Write the announced text to the body of the page
    response.write('Hello, World!\n');

    // 3. Tell the server that all of the response headers and body have been sent
    response.end();

}).listen(1337); // 4. Tells the server what port to be on
 

使用任何文件名保存文件。在这种情况下,如果我们将其命名为hello.js 我们可以通过转到文件所在的目录并使用以下命令来运行应用程序:

const http = require('http'); // Loads the http module

http.createServer((request, response) => {

    // 1. Tell the browser everything is OK (Status code 200), and the data is in plain text
    response.writeHead(200, {
        'Content-Type': 'text/plain'
    });

    // 2. Write the announced text to the body of the page
    response.write('Hello, World!\n');

    // 3. Tell the server that all of the response headers and body have been sent
    response.end();

}).listen(1337); // 4. Tells the server what port to be on
 

然后可以使用URL http:// localhost:1337http://127.0.0.1:1337在浏览器中访问创建的服务器。

将出现一个简单的网页,顶部显示“Hello,World!”文本,如下面的屏幕截图所示。

截图

可编辑的在线示例。

核心模块

Node.js是一个Javascript引擎(用于Chrome的谷歌V8引擎,用C ++编写),允许在浏览器外运行Javascript。虽然有许多库可用于扩展Node的功能,但该引擎附带了一组实现基本功能的核心模块

Node目前包含34个核心模块:

[ 'assert',
  'buffer',
  'c/c++_addons',
  'child_process',
  'cluster',
  'console',
  'crypto',
  'deprecated_apis',
  'dns',
  'domain',
  'Events',
  'fs',
  'http',
  'https',
  'module',
  'net',
  'os',
  'path',
  'punycode',
  'querystring',
  'readline',
  'repl',
  'stream',
  'string_decoder',
  'timers',
  'tls_(ssl)',
  'tracing',
  'tty',
  'dgram',
  'url',
  'util',
  'v8',
  'vm',
  'zlib' ]
 

此列表是从Node文档API https://nodejs.org/api/all.html(JSON文件: https//nodejs.org/api/all.json )获得的。

所有核心模块一目了然

断言

assert 模块提供了一组简单的断言测试,可用于测试不变量。

缓冲

在ECMAScript 2015(ES6)中引入TypedArray 之前,JavaScript语言没有读取或操作二进制数据流的机制。 Buffer 类是作为Node.js API的一部分引入的,可以在TCP流和文件系统操作等环境中与八位字节流进行交互。

现在已经在ES6中添加了TypedArray Buffer 类以更优化且适合Node.js用例的方式实现Uin t8Array API。

C / C ++ _插件

Node.js Addons是动态链接的共享对象,用C或C ++编写,可以使用require() 函数加载到Node.js中,就像它们是普通的Node.js模块一样使用。它们主要用于提供Node.js中运行的JavaScript与C / C ++库之间的接口。

child_process

child_process 模块提供了以与popen(3)类似但不相同的方式生成子进程的能力。

Node.js的单个实例在单个线程中运行。为了利用多核系统,用户有时会想要启动一个Node.js进程集群来处理负载。群集模块允许您轻松创建所有共享服务器端口的子进程。

安慰

console 模块提供了一个简单的调试控制台,类似于Web浏览器提供的JavaScript控制台机制。

加密

crypto 模块提供加密功能,其中包括一组用于OpenSSL哈希,HMAC,密码,解密,签名和验证功能的包装器。

deprecated_apis

当以下情况之一时,Node.js可以弃用API:(a)API的使用被认为是不安全的,(b)已经提供了改进的替代API,或者(c)在未来的主要版本中预计会对API进行重大更改。

DNS

dns 模块包含属于两个不同类别的函数:

  1. 使用基础操作系统工具执行名称解析但不一定执行任何网络通信的函数。此类别仅包含一个函数: dns.lookup()
  2. 连接到实际DNS服务器以执行名称解析并始终使用网络执行DNS查询的函数。此类别包含dns 模块中 dns.lookup() 之外的所有函数。

此模块正在等待弃用 。替换API完成后,将完全弃用此模块。大多数最终用户应该有理由使用这个模块。绝对必须具有域提供的功能的用户可能暂时依赖它,但是应该期望将来必须迁移到不同的解决方案。

活动

Node.js核心API的大部分是围绕一个惯用的异步事件驱动架构构建的,其中某些类型的对象(称为“发射器”)周期性地发出命名事件,导致调用Function对象(“侦听器”)。

FS

文件I / O由标准POSIX函数的简单包装提供。要使用此模块,请执行require('fs') 。所有方法都有异步和同步形式。

HTTP

Node.js中的HTTP接口旨在支持传统上难以使用的协议的许多功能。特别是,大的,可能是块编码的消息。界面小心永远不会缓冲整个请求或响应 - 用户能够流式传输数据。

HTTPS

HTTPS是TLS / SSL上的HTTP协议。在Node.js中,这是作为一个单独的模块实现的。

Node.js有一个简单的模块加载系统。在Node.js中,文件和模块是一一对应的(每个文件都被视为一个单独的模块)。

net 模块为您提供异步网络包装器。它包含用于创建服务器和客户端(称为流)的功能。你可以用require('net'); 包含这个模块require('net');

os 模块提供了许多与操作系统相关的实用方法。

路径

path 模块提供用于处理文件和目录路径的实用程序。

Punycode码

不推荐使用Node.js中捆绑的punycode模块的版本

请求参数

querystring 模块提供用于解析和格式化URL查询字符串的实用程序。

的ReadLine

readline 模块提供了一个接口,用于一次一行地从可读流(例如process.stdin )读取数据。

REPL

repl 模块提供Read-Eval-Print-Loop(REPL)实现,既可以作为独立程序使用,也可以在其他应用程序中使用。

流是一个抽象接口,用于处理Node.js中的流数据。 stream 模块提供了一个基本API,可以轻松构建实现流接口的对象。

Node.js提供了许多流对象。例如,对HTTP服务器和process.stdout 的请求都是流实例。

string_decoder

string_decoder 模块提供了一个API,用于以保留编码的多字节UTF-8和UTF-16字符的方式将Buffer 对象解码为字符串。

计时器

timer 模块公开了一个全局API,用于调度将在某个未来时间段调用的函数。因为计时器函数是全局变量,所以不需要调用require('timers') 来使用API​​。

Node.js中的计时器函数实现与Web浏览器提供的计时器API类似的API,但使用围绕Node.js事件循环构建的不同内部实现。

tls_(SSL)

tls 模块提供了基于OpenSSL构建的传输层安全性(TLS)和安全套接字层(SSL)协议的实现。

追踪

跟踪事件提供了一种机制来集中由V8,节点核心和用户空间代码生成的跟踪信息。

可以通过在启动Node.js应用程序时传递--trace-events-enabled 标志来启用跟踪。

TTY

tty 模块提供tty.ReadStreamtty.WriteStream 类。在大多数情况下,没有必要或不可能直接使用该模块。

DGRAM

dgram 模块提供UDP数据报套接字的实现。

网址

url 模块提供用于URL解析和解析的实用程序。

UTIL

util 模块主要用于支持Node.js自己的内部API的需求。但是,许多实用程序对应用程序和模块开发人员也很有用。

V8

v8 模块公开了特定于Node.js二进制文件中内置的V8版本的API。

注意 :API和实现可能随时更改。

VM

vm 模块提供用于在V8虚拟机上下文中编译和运行代码的API。 JavaScript代码可以立即编译和运行,也可以编译,保存并稍后运行。

注意 :vm模块不是安全机制。 不要使用它来运行不受信任的代码

zlib的

zlib 模块提供使用Gzip和Deflate / Inflate实现的压缩功能。

调试NodeJS应用程序

您可以使用节点检查器。运行此命令以通过npm安装它:

npm install -g node-inspector
 

然后,您可以使用调试应用程序

npm install -g node-inspector
 

可以在此处找到Github存储库: https//github.com/node-inspector/node-inspector


本机调试

您也可以通过以下方式启动它本地调试node.js:

npm install -g node-inspector
 

要在您想要的代码行中完全断开调试器,请使用以下命令:

npm install -g node-inspector
 

有关更多信息,请参见此处

在node.js 8中使用以下命令:

npm install -g node-inspector
 

然后打开about://inspect 在最新版本的Google Chrome中about://inspect 并选择您的Node脚本以获得Chrome DevTools的调试体验。

在线部署您的应用程序

将应用程序部署到(Node.js特定的)托管环境时,此环境通常会提供可用于运行服务器的PORT 环境变量。将端口号更改为process.env.PORT 允许您访问该应用程序。

例如,

http.createServer(function(request, response) {
   // your server code
}).listen(process.env.PORT);
 

此外,如果您想在调试时访问此脱机,可以使用以下命令:

http.createServer(function(request, response) {
   // your server code
}).listen(process.env.PORT);
 

其中3000 是离线端口号。

Hello World基本路由

了解了如何使用节点创建HTTP服务器之后 ,了解如何根据用户导航到的路径“执行”操作非常重要。这种现象称为“路由”。

最基本的例子是检查if (request.url === 'some/path/here') ,然后调用一个用新文件响应的函数。

这方面的一个例子可以在这里看到:

const http = require('http');

function index (request, response) {
    response.writeHead(200);
    response.end('Hello, World!');
}

http.createServer(function (request, response) {
    
    if (request.url === '/') {
        return index(request, response);
    }

    response.writeHead(404);
    response.end(http.STATUS_CODES[404]);

}).listen(1337);
 

但是,如果你继续定义这样的“路线”,你最终会得到一个巨大的回调函数,我们不希望像这样的巨大混乱,所以让我们看看我们是否可以清理它。

首先,让我们将所有路由存储在一个对象中:

const http = require('http');

function index (request, response) {
    response.writeHead(200);
    response.end('Hello, World!');
}

http.createServer(function (request, response) {
    
    if (request.url === '/') {
        return index(request, response);
    }

    response.writeHead(404);
    response.end(http.STATUS_CODES[404]);

}).listen(1337);
 

现在我们已经在一个对象中存储了2个路由,现在我们可以在主回调中检查它们:

const http = require('http');

function index (request, response) {
    response.writeHead(200);
    response.end('Hello, World!');
}

http.createServer(function (request, response) {
    
    if (request.url === '/') {
        return index(request, response);
    }

    response.writeHead(404);
    response.end(http.STATUS_CODES[404]);

}).listen(1337);
 

现在,每次尝试浏览网站时,都会检查路径中是否存在该路径,并调用相应的功能。如果未找到路由,则服务器将以404(未找到)进行响应。

而且你有它 - 使用HTTP Server API进行路由非常简单。

Hello World命令行

Node.js也可用于创建命令行实用程序。下面的示例从命令行读取第一个参数并打印Hello消息。

要在Unix系统上运行此代码:

  1. 创建一个新文件并粘贴下面的代码。文件名无关紧要。
  2. 使用chmod 700 FILE_NAME 使此文件可执行
  3. 使用./APP_NAME David 运行该应用

在Windows上,您执行步骤1并使用node APP_NAME David 运行它

#!/usr/bin/env node

'use strict';

/*
    The command line arguments are stored in the `process.argv` array, 
    which has the following structure:
    [0] The path of the executable that started the Node.js process
    [1] The path to this application
    [2-n] the command line arguments

    Example: [ '/bin/node', '/path/to/yourscript', 'arg1', 'arg2', ... ]
    src: https://nodejs.org/api/process.html#process_process_argv
 */

// Store the first argument as username.
var username = process.argv[2];

// Check if the username hasn't been provided.
if (!username) {

    // Extract the filename
    var appName = process.argv[1].split(require('path').sep).pop();

    //  Give the user an example on how to use the app.
    console.error('Missing argument! Example: %s YOUR_NAME', appName);

    // Exit the app (success: 0, error: 1). 
    // An error will stop the execution chain. For example:
    //   ./app.js && ls       -> won't execute ls
    //   ./app.js David && ls -> will execute ls
    process.exit(1);
}

// Print the message to the console.
console.log('Hello %s!', username);
 

REPL中的Hello World

当不带参数调用时,Node.js启动一个REPL(Read-Eval-Print-Loop),也称为“ Node shell ”。

在命令提示符下键入node

$ node
>
 

在Node shell提示符下> 键入“Hello World!”

$ node
>
 

快乐你好世界

以下示例使用Express创建侦听端口3000的HTTP服务器,该服务器以“Hello,World!”响应。 Express是一种常用的Web框架,可用于创建HTTP API。

首先,创建一个新文件夹,例如myApp 。进入myApp 并创建一个包含以下代码的新JavaScript文件(例如,将其hello.jshello.js )。然后使用命令行中的npm install --save express 安装express模块​​。 有关如何安装软件包的更多信息,请参阅此文档

// Import the top-level function of express
const express = require('express');

// Creates an Express application using the top-level function
const app = express();

// Define port number as 3000
const port = 3000;

// Routes HTTP GET requests to the specified path "/" with the specified callback function
app.get('/', function(request, response) {
  response.send('Hello, World!');
});

// Make the app listen on port 3000
app.listen(port, function() {
  console.log('Server listening on http://localhost:' + port);
});
 

从命令行运行以下命令:

// Import the top-level function of express
const express = require('express');

// Creates an Express application using the top-level function
const app = express();

// Define port number as 3000
const port = 3000;

// Routes HTTP GET requests to the specified path "/" with the specified callback function
app.get('/', function(request, response) {
  response.send('Hello, World!');
});

// Make the app listen on port 3000
app.listen(port, function() {
  console.log('Server listening on http://localhost:' + port);
});
 

打开浏览器并导航到http://localhost:3000http://127.0.0.1:3000 以查看响应。

有关Express框架的更多信息,您可以查看Web Apps With Express部分

如何启动并运行基本的HTTPS Web服务器!

在系统上安装了node.js后,您只需按照以下步骤操作即可运行支持HTTP和HTTPS的基本Web服务器!



第1步:构建证书颁发机构

  1. 创建要存储密钥和证书的文件夹:

    mkdir conf


  1. 转到该目录:

    cd conf


  1. 抓住这个ca.cnf 文件,用作配置快捷方式:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf


  1. 使用此配置创建新的证书颁发机构:

    openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem


  1. 既然我们在ca-key.pemca-cert.pem 拥有我们的证书权限,那么让我们为服务器生成一个私钥:

    openssl genrsa -out key.pem 4096


  1. 抓取此server.cnf 文件以用作配置快捷方式:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf


  1. 使用此配置生成证书签名请求:

    openssl req -new -config server.cnf -key key.pem -out csr.pem


  1. 签署请求:

    openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem



步骤2:将证书安装为根证书

  1. 将您的证书复制到根证书的文件夹:

    sudo cp ca-crt.pem /usr/local/share/ca-certificates/ca-crt.pem


  1. 更新CA商店:

    sudo update-ca-certificates



第3步:启动节点服务器

首先,您要创建一个包含实际服务器代码的server.js 文件。

Node.js中HTTPS服务器的最小设置如下:

var https = require('https');
var fs = require('fs');

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

https.createServer(httpsOptions, app).listen(4433);
 

如果您还想支持http请求,则需要进行以下小修改:

var https = require('https');
var fs = require('fs');

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

https.createServer(httpsOptions, app).listen(4433);
 
  1. 转到server.js 所在的目录:

    cd /path/to


  1. 运行server.js

    node server.js

安装和运行Node.js.

首先,在开发计算机上安装Node.js.

Windows:导航到下载页面并下载/运行安装程序。

Mac:导航到下载页面并下载/运行安装程序。或者,您可以使用brew install node 通过Homebrew brew install node 。 Homebrew是Macintosh的命令行程序包管理器,有关它的更多信息可以在Homebrew网站上找到。

Linux:命令行安装页面上按照发行版的说明进行操作。


运行节点程序

要运行Node.js程序,只需运行node app.jsnodejs app.js ,其中app.js 是节点应用程序源代码的文件名。您不需要为Node包含.js 后缀来查找您要运行的脚本。

或者,在基于UNIX的操作系统下,节点程序可以作为终端脚本执行。为此,它需要从指向节点解释器的shebang开始,例如#!/usr/bin/env node 。该文件还必须设置为可执行文件,可以使用chmod 完成。现在可以从命令行直接运行脚本。

TLS套接字:服务器和客户端

此常规TCP连接与常规TCP连接之间的唯一主要区别是私钥和公共证书,您必须将其设置为选项对象。

如何创建密钥和证书

此安全过程的第一步是创建私钥。什么是私钥?基本上,它是一组用于加密信息的随机噪声。从理论上讲,您可以创建一个密钥,并使用它来加密您想要的任何密钥。但最佳做法是为特定事物设置不同的密钥。因为如果有人偷了你的私钥,那就像是有人偷了你的房门钥匙。想象一下,如果你使用相同的钥匙来锁定你的车,车库,办公室等。

openssl genrsa -out private-key.pem 1024

一旦我们拥有了私钥,我们就可以创建一个CSR(证书签名请求),这是我们要求由一个花哨的权威机构签署私钥的请求。这就是您必须输入与贵公司相关的信息的原因。签名机构将查看此信息,并用于验证您。在我们的例子中,你键入的内容并不重要,因为在下一步我们将自己签署我们的证书。

openssl req -new -key private-key.pem -out csr.pem

现在我们已经完成了我们的论文工作,现在是时候假装我们是一个很酷的签名机构。

openssl x509 -req -in csr.pem -signkey private-key.pem -out public-cert.pem

现在您拥有了私钥和公共证书,您可以在两个NodeJS应用程序之间建立安全连接。而且,正如您在示例代码中看到的那样,这是一个非常简单的过程。

重要!

自从我们自己创建公共证书以来,我们的证书毫无价值,因为我们是无名小卒。默认情况下,NodeJS服务器不会信任这样的证书,这就是为什么我们需要告诉它实际信任我们的证书,并使用以下选项rejectUnauthorized:false。 非常重要 :永远不要在生产环境中将此变量设置为true。

TLS套接字服务器

'use strict';

var tls = require('tls');
var fs = require('fs');

const PORT = 1337;
const HOST = '127.0.0.1'

var options = {
    key: fs.readFileSync('private-key.pem'),
    cert: fs.readFileSync('public-cert.pem')
};

var server = tls.createServer(options, function(socket) {

    // Send a friendly message
    socket.write("I am the server sending you a message.");

    // Print the data that we received
    socket.on('data', function(data) {

        console.log('Received: %s [it is %d bytes long]',
            data.toString().replace(/(\n)/gm,""),
            data.length);

    });

    // Let us know when the transmission is over
    socket.on('end', function() {

        console.log('EOT (End Of Transmission)');

    });

});

// Start listening on a specific port and address
server.listen(PORT, HOST, function() {

    console.log("I'm listening at %s, on port %s", HOST, PORT);

});

// When an error occurs, show it.
server.on('error', function(error) {

    console.error(error);

    // Close the connection after the error occurred.
    server.destroy();

});
 

TLS套接字客户端

'use strict';

var tls = require('tls');
var fs = require('fs');

const PORT = 1337;
const HOST = '127.0.0.1'

var options = {
    key: fs.readFileSync('private-key.pem'),
    cert: fs.readFileSync('public-cert.pem')
};

var server = tls.createServer(options, function(socket) {

    // Send a friendly message
    socket.write("I am the server sending you a message.");

    // Print the data that we received
    socket.on('data', function(data) {

        console.log('Received: %s [it is %d bytes long]',
            data.toString().replace(/(\n)/gm,""),
            data.length);

    });

    // Let us know when the transmission is over
    socket.on('end', function() {

        console.log('EOT (End Of Transmission)');

    });

});

// Start listening on a specific port and address
server.listen(PORT, HOST, function() {

    console.log("I'm listening at %s, on port %s", HOST, PORT);

});

// When an error occurs, show it.
server.on('error', function(error) {

    console.error(error);

    // Close the connection after the error occurred.
    server.destroy();

});
 

Stats

24028 Contributors: 66
Sunday, July 23, 2017
许可下: CC-BY-SA

不隶属于 Stack Overflow
Rip Tutorial: info@zzzprojects.com

下载电子书