Node.js

创建 Node.js 应用

步骤一、引入required模块

我们使用require指令来载入http模块,并将实例化的HTTP赋值给变量http,实例如下:

var http = require("http");

步骤二、创建服务器

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

实例如下,在你项目的根目录下创建一个叫server.js的文件,并写入以下代码:

var http = require('http');

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/');

以上代码我们完成了一个可以工作的HTTP服务器。

使用node命令执行以上的代码:

node server.js
Server running at http://127.0.0.1:8888/

cmdrun

接下来,打开浏览器访问http://127.0.0.1:8888/,你会看到一个写着"Hello World”的网页。

nodejs-helloworld

分析Node.js的HTTP服务器:

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

Node.js回调函数

node.js异步编程的直接体现就是回调

回调函数在任务完成后就会被调用

var fs=require('fs');

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

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

输出结果:

程序执行结束!

“input.txt的内容”

Node.js 事件循环

Node.js有多个内置的事件,我们可以通过引入events模块,并通过实例化EventEmitter类来绑定和监听事件,如下实例:

// 引入events模块
var events = require('events');
// 创建eventEmitter对象
var eventEmitter = new events.EventEmitter();

// 创建事件处理程序
var connectHandlder = function connected(){
    console.log('连接成功。');

    // 触发 data_received 事件
    eventEmitter.emit('data_received');
}

// 绑定connection事件处理程序
eventEmitter.on('connection',connectHandler);

// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received',function(){
    console.log('数据接收成功。');
});

//触发 connection 事件
eventEmitter.emit('connection');

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

执行以上代码可获得

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

Node应用程序是如何工作的?

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

马嘉骏要开心

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

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err){
      console.log(err.stack);
      return;
   }
   console.log(data.toString());
});
console.log("程序执行完毕");

结果如下:

PS F:\360MoveData\Users\Lenovo\Desktop\HelloNode> node call
马嘉骏要开心
程序执行结束

假如删除input.txt

PS F:\360MoveData\Users\Lenovo\Desktop\HelloNode> node call
fs.js:114
    throw err;
    ^

Error: ENOENT: no such file or directory, open 'input.txt'
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)

fs.readFile():

用于异步函数用于读取文件。

如果在读取文件过程中发生错误,错误err对象就会输出错误信息。

如果没有发生错误,readFile跳过err对象的输出,文件内容就通过回调函数输出

Node.js事件

Node.js文件处理

fs.unlink

删除文件

fs.mkdirSync(‘stuff’);

创建了一个stuff文件夹

fs.rmdirSync(‘stuff’);

删stuff

var fs = require('fs');

fs.mkdir('stuff',function(){
    fs.readFile('input1.txt','utf8',function(err,data){
        fs.writeFile('stuff/writeMe.txt',data,function(){
            console.log('copy successfully');
        })
    })
});

前端     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!