首页 > 技术文章 > nodejs

scale 2017-03-29 10:06 原文

nodejs

官方宣言

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.

什么意思,一脸懵逼,二脸懵逼,矩阵懵逼... 各位大胸第们,四级过了没。哈哈,我又调皮了,抱歉!还记得一起补考的岁月吗?青春一去不返;还记得王者之路吗?那曾经是我的梦啊;还记得hello word吗?那时都不知道世界上有多少种代码语言。

想当初,看今朝,大学撸游戏,工作撸代码,俗话说得好:“我不上王者,谁上王者”,还有谁? node来到这个世界已经很久了,相信大家对他也不是很陌生了,工作之余,吹吹水,写写文章,抛下代码,一身轻松。今天为大家带来的是,node 的第一视角,欢迎车震们来解说这一期的 nodejs。

某宝推荐环节

接下来进入广告环节

技能介绍

node是什么?可以说是javascript插上了翅膀,会飞的猪? No,猪之前没有飞起来,并不是说他没有这个本领,只是飞的太低,没有被大家所关注到,在javascript最初的时候,是有在服务器端使用的实例的,如网景公司的服务器端脚本代码 LiveWire ,那么从这一点出发来看,猪飞起来了并不是插上了翅膀,而是通过不断的改变将自身的能力放大化了。

人机练习

说了这么多,来认识一下这名英雄,nodejs。闲话不多说,进入比赛的画面。

使用 Node 创建 Web 服务器

Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块,代码如下:

var http = require('http');

  • 以下是演示一个最基本的 HTTP 服务器架构(使用8081端口),创建 server.js 文件,代码如下所示:
var http = require('http');
var fs = require('fs');
var url = require('url');

// 创建服务器
http.createServer( function (request, response) {  
   // 解析请求,包括文件名
   var pathname = url.parse(request.url).pathname;
   
   // 输出请求的文件名
   console.log("Request for " + pathname + " received.");
   
   // 从文件系统中读取请求的文件内容
   fs.readFile(pathname.substr(1), function (err, data) {
      if (err) {
         console.log(err);
         // HTTP 状态码: 404 : NOT FOUND
         // Content Type: text/plain
         response.writeHead(404, {'Content-Type': 'text/html'});
      }else{	         
         // HTTP 状态码: 200 : OK
         // Content Type: text/plain
         response.writeHead(200, {'Content-Type': 'text/html'});	
         
         // 响应文件内容
         response.write(data.toString());		
      }
      //  发送响应数据
      response.end();
   });   
}).listen(8081);

// 控制台会输出以下信息
console.log('Server running at http://127.0.0.1:8081/');

  • 接下来我们在该目录下创建一个 index.htm 文件,代码如下:
<html>
<head>
<title>Sample Page</title>
</head>
<body>
Hello World!
</body>
</html>

执行 server.js 文件:

$ node server.js
Server running at http://127.0.0.1:8081/

接着我们在浏览器中打开地址:http://127.0.0.1:8081/index.htm, 显示如下图所示:

执行 server.js 的控制台输出信息如下:

Server running at http://127.0.0.1:8081/
Request for /index.htm received. # 客户端请求信息

nodejs连接MongoDB

  • 在MongoDB中插入数据,以下实例我们在blood表中插入数据
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/rambo'; # 数据库为 rambo
 
var insertData = function(db, callback) {  
    //连接到表 site
    var collection = db.collection('blood');
    //插入数据
    var data = [{"name":"德莱联盟","url":"www.rambo.com"},{"name":"武器大师","url":"c.rambo.com"}];
    collection.insert(data, function(err, result) { 
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }     
        callback(result);
    });
}
 
MongoClient.connect(DB_CONN_STR, function(err, db) {
    console.log("连接成功!");
    insertData(db, function(result) {
        console.log(result);
        db.close();
    });
});

执行以下命令:

$ node test.js
连接成功!
{ result: { ok: 1, n: 2 },
  ops: 
   [ { name: '德莱联盟',
       url: 'www.rambo.com',
       _id: 58c25e13a08de70d3b9d4116 },
     { name: '武器大师',
       url: 'c.rambo.com',
       _id: 58c25e13a08de70d3b9d4117 } ],
  insertedCount: 2,
  insertedIds: [ 58c25e13a08de70d3b9d4116, 58c25e13a08de70d3b9d4117 ] }

从输出结果来看,数据已插入成功。
我们也可以打开 MongoDB 的客户端查看数据,如:

show dbs
admin 0.000GB
local 0.000GB
rambo 0.000GB # 自动创建了 rambo 数据库
show tables
blood # 自动创建了 blood 集合(数据表)
db.site.find() # 查看集合中的数据
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "德莱联盟", "url" : "www.rambo.com" }
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "武器大师", "url" : "c.rambo.com" }

总结

从上面的demo来看,nodejs是真正意义上将js实现了运用在后台,这大大方便了前端程序猿对于后台的认识以及进一步的控制,这也意味着js一种语言实现前后端,高大上,真是粪坑旁边打地铺,离屎不远了。哈哈哈,开玩笑了,好的各位观众朋友们这一期的视频到此结束,我们下期再见。

推荐阅读