Node.js基础

安装

在使用Node.js之前,你需要安装它。 安装过程非常简单,如果你使用windows或者OS x,nodejs.org提供了不同操作系统下的安装包,对于Linux来说,你可以使用任何的打包工具。打开你的终端,输入:

sudo apt-get update
sudo apt-get install node

或者:

sudo aptitude update
sudo aptitude install node

Node.js位于sid repositories,你可以添加它们到你的列表里:

sudo echo deb http://ftp.us.debian.org/debian/ sid main > /etc/apt/sources.list.d/sid.list

注意在旧系统中安装sid包可能会破坏你的系统。所以当心,安装完node后请移除/etc/apt/sources.list.d/sid.list

安装新模块

Node.js拥有一个包管理器,叫做Node Package Manager(NPM)。自动随node.js安装,你可以使用NPM来安装模块。执行如下语句:

npm install module_name

不管你使用何种OS,上面语句会安装指定的模块名称

Hello World 应用

很自然,我们第一个Node.js脚本将打印Hello world到控制台。如下:

console.log('Hello World, GBin1!');

我们保存以上脚本为hello.js。打开终端/命令行,找到hello.js,执行如下:

node hello.js

你应该在控制台看到'hello world, GBin1!'字样。

HTTP Server

下面我们开发一个更复杂的应用,当让也不是那么复杂。请先看看如下代码http.js:

// Include http module.
var http = require("http");
 
// Create the server. Function passed as parameter is called on every request made.
// request variable holds all request parameters
// response variable allows you to do anything with response sent to the client.
http.createServer(function (request, response) {
   // Attach listener on end event.
   // This event is called when client sent all data and is waiting for response.
   request.on("end", function () {
      // Write headers to the response.
      // 200 is HTTP status code (this one means success)
      // Second parameter holds header fields in object
      // We are sending plain text, so Content-Type should be text/plain
      response.writeHead(200, {
         'Content-Type': 'text/html'
      });
      // Send data and end response.
      response.end('Welcome to <a href="http://www.gbin1.com">GBin1.com</a>!');
   });
// Listen on the 8080 port.
}).listen(8080);

代码其实并不复杂,你可以看到我们使用response.write()将数据传递到客户端,当然必须在response.end()之前调用。保存代码,然后在控制台执行:

node http.js

打开任何浏览器,输入http://localhost:8080,你可以看到"Welcome to GBin1.com!"出现在页面上。

处理URL参数

正如前面我们提到的,我们需要自己处理Node.js中的任何东西,包括处理参数,其实非常简单,如下:

// Include http module, 
var http = require("http"), 
// And url module, which is very helpful in parsing request parameters. 
   url = require("url"); 
 
// Create the server. 
http.createServer(function (request, response) { 
   // Attach listener on end event. 
   request.on('end', function () { 
      // Parse the request for arguments and store them in _get variable. 
      // This function parses the url from request and returns object representation. 
      var _get = url.parse(request.url, true).query; 
      // Write headers to the response. 
      response.writeHead(200, { 
         'Content-Type': 'text/plain'
      }); 
      // Send data and end response. 
      response.end('Here is your data: ' + _get['data']); 
   }); 
// Listen on the 8080 port. 
}).listen(8080);

这个代码使用url模块的parse()方法,来将请求的URL转换为一个对象。返回的对象拥有一个query属性,可以用来取得URL参数。保存这段代码为get.js并且执行:

node get.js

打开浏览器并且输入地址http://localhost:8080/?data=put_gbstring_here。你将看到效果。

写入和读取文件

我们在node.js中使用fs模块来管理文件。使用fs.readFile()和fs.writeFile()方法来读取和写入文件,请看如下代码:

// Include http module,
var http = require("http"),
// And mysql module you've just installed.
   fs = require("fs");
 
// Create the http server.
http.createServer(function (request, response) {
   // Attach listener on end event.
   request.on("end", function () {
      // Read the file.
      fs.readFile("test.txt", 'utf-8', function (error, data) {
         // Write headers.
         response.writeHead(200, {
            'Content-Type': 'text/plain'
         });
         // Increment the number obtained from file.
         data = parseInt(data) + 1;
         // Write incremented number to file.
         fs.writeFile('test.txt', data);
         // End response with some nice message.
         response.end('This page was refreshed ' + data + ' times!');
      });
   });
// Listen on the 8080 port.
}).listen(8080);

将以上代码保存为file.js,然后创建一个test.txt文件到同一个目录下。

代码展示如何使用fs.readFile()和fs.writeFile()。每一次服务器收到一个请求,脚本就会自动添加1,然后写回文件。fs.readFile()方法接受3个参数:文件名称,编码,callback方法。

写入文件,在这个例子中,非常简单。我们不需要等待任何结果,虽然你仍旧处理错误。fs.writeFile()方法接受文件名称和数据作为参数。同时接受第三个和第四个参数(都是可选的)来指定编码和callback方法。运行脚本:

node files.js

打 开浏览器,输入http://localhost:8080,刷新页面几次。看看结果好像有bug,这里每次加了2。其实这不是一个错误。每一次你请求这 个URL的时候,俩个请求被发送到服务器。第一个请求是浏览器自动请求的 favion.ico。当然第二个请求是我们脚本对应URL(http://localhost:8080)

为了解决这个问题,我们修改代码如下:

// Include http module,
var http = require("http"),
// And mysql module you've just installed.
   fs = require("fs");
 
// Create the http server.
http.createServer(function (request, response) {
   // Attach listener on end event.
   request.on('end', function () {
      // Check if user requests /
      if (request.url == '/') {
         // Read the file.
         fs.readFile('test.txt', 'utf-8', function (error, data) {
            // Write headers.
            response.writeHead(200, {
               'Content-Type': 'text/plain'
            });
            // Increment the number obtained from file.
            data = parseInt(data) + 1;
            // Write incremented number to file.
            fs.writeFile('test.txt', data);
            // End response with some nice message.
            response.end('This page was refreshed ' + data + ' times!');
         });
      } else {
         // Indicate that requested file was not found.
         response.writeHead(404);
         // And end request without sending any data.
         response.end();
      }
   });
// Listen on the 8080 port.
}).listen(8080);

现在看看,结果是不是正确了。

访问Mysql数据库

对 于一个正常的服务器端技术,肯定需要有机制来处理数据库操作。为了在node.js中使用数据库,我们需要安装类库,这里我们使用node-mysql。 完整的名称是[email protected](@后面是版本号)。打开你的控制台,导航到你保存脚本的目录,执行如下命令:

npm install [email protected]

这将下载和安装模块,同时创建node_module目录到目前目录中。下面我们看看如何使用代码访问mysql:

// Include http module, 
var http = require('http'), 
// And mysql module you've just installed. 
   mysql = require("mysql"); 
     
// Create the connection. 
// Data is default to new mysql installation and should be changed according to your configuration. 
var connection = mysql.createConnection({ 
   user: "root", 
   password: "", 
   database: "db_name"
}); 
 
// Create the http server. 
http.createServer(function (request, response) { 
   // Attach listener on end event. 
   request.on('end', function () { 
      // Query the database. 
      connection.query('SELECT * FROM your_table;', function (error, rows, fields) { 
         response.writeHead(200, { 
            'Content-Type': 'x-application/json' 
         }); 
         // Send data as JSON string. 
         // Rows variable holds the result of the query. 
         response.end(JSON.stringify(rows)); 
      }); 
   }); 
// Listen on the 8080 port. 
}).listen(8080);

查 询数据库非常简单,输入查询语句和callback方法。在一个实际的应用中,你应该检查是否有错误!(一旦有错误,error参数将不会为 undefined),并且发送响应代码基于查询成功或者失败,注意我们设定content-type为x-application/json,这是正确 的JSON MIME类型。rows参数包含了查询结果,这里我们使用JSON,stringify()方法简单的将rows中的数据转换为JSON结构

保存脚本为mysql.js,执行:

node mysql.js

在浏览器中输入http://localhost:8080,你可以看到要求你下载JSON格式数据文件。


你可能感兴趣的:(node.js基础)