95992828九五至尊2

本人的物联网络综合艺术合文化之创造服务端1,js学习入门

四月 17th, 2019  |  882828九五至尊手机版

Node.js是什么

Node.js是一个得以允许我们在服务器端运维JavaScript代码的先后。
这是什么样意思啊?平常,大家写的JavaScript代码都以在浏览器中运作的。
实在,浏览器就是贰个JavaScript运营时环境,用于解释施行js代码。
更进一步地说,尽管浏览器提供了JavaScript运行时环境,可是它地处客户端,也等于说此时JavaScript只好用来编写前端代码。
而是,由于Node.js的面世,JavaScript代码的进行就不会被局限于在客户端,我们同样能够让JavaScript代码在服务端实践。
OK,也便是说,纵然你不懂任何服务端编程语言,不过你会写JavaScript代码,那么您就一样能够编写制定在服务端运维的程序。
注意:虽说大家得以应用Node.js运营js代码,不过Node.js本人却是C语言开拓的!

关于Node.js的合法表达(详见:https://nodejs.org/zh-cn/):

  • Node.js是3个依照Chrome V八引擎的JavaScript运维时。
  • Node.js使用便捷、轻量级的事件驱动、非阻塞 I/O模型。
  • 它的包生态系统,npm,是当下世界上最大的开源库生态系统。

这一局部,大家先来学习创建服务端的基本知识,下部分,将交给实际应用的服务端代码及其分析。
我们运用Node.js来创制服务端。

什么利用Node.js

行使Node.js格外简单,有贰种艺术:
这一个,直接运转node命令,进入node交互式shell环境,然后在中间编写并执行js代码。

> node
> console.log("hello,world")
hello,world
undefined
>

地方案例中,在shell中键入了“console.log(‘hello,world’)”并敲回车。Node便初阶推行该代码,并展现刚才记录的新闻,同时打字与印刷出“undefined”。那是因为每条命令都会回到七个值,而console.log未有其余再次回到,故输出“undefined”。

那几个,使用Node.js试行二个JavaScript文件,那是大家经常最常用的格局。

> node D:\\Node.js\\workspace\\test-helloworld\\logparserv2.js
2013-08-09T13:50:33.166Z A 2
2013-08-09T13:51:33.166Z B 1
2013-08-09T13:52:33.166Z C 6
2013-08-09T13:53:33.166Z B 8
2013-08-09T13:54:33.166Z B 5
{ A: 2, B: 14, C: 6 }

出口内容为对应js文件中的console输出新闻。

Node.js是运转在服务端的JavaScript,它是二个基于Chrome
JavaScript运营时确立的三个平台,是1个事件驱动I/O服务端JavaScript环境,基于谷歌(Google)的V8引擎,施行JavaScript的进程更快,质量分外好。

Node.js应用举例

Node.js是单线程的。所以,Node.js典型的格局是应用异步回调。
差不离,你告知Node.js要做的事,它推行完后便会调用你的函数(回调函数),这对于Web服务器特别重要。
在今世Web应用访问数据库的历程中专门广泛,当你等待数据库重回结果的长河中,Node能够处理越多请求。
与历次一连仅处理2个线程相比较,它使你以十分的小的支付来拍卖成千上万个互相连接。
Node.js本身已经嵌入了过多卓有成效的编制程序模块,能够用于落到实处部分可行的意义。
并且也已经存在重重单独的框架模块,能够方便地落到实处此前只好选择笨重的服务端语言实现的效能。

Node.js安装

在Ubuntu等linux系统中,安装10分轻松。在指令行终端中一贯实行上边包车型客车安装命令就能够了。
sudo apt-get install nodejs
设置到位后,能够查阅一下当下的Node版本:
node -v

1. 分析日志文件

// 加载filesystem模块,读取文件
var fs = require("fs");
fs.readFile("D:\\Node.js\\workspace\\test-helloworld\\test.log", function(error, logData){
    if(error) {
        throw error;
    }
    var text = logData.toString();
    console.log(text);
    // 解析文本
    var results = {};
    // 将文本分割为多行
    var lines = text.split("\n");
    lines.forEach(function(line){
        // 对每一行文本进行解析
        var parts = line.split(" ");
        var letter = parts[1];
        var count = parseInt(parts[2]);
        if(!results[letter]) {
            results[letter] = 0;
        }
        results[letter] += count;
    });
    console.log(results);
});

日志文件格式:

2013-08-09T13:50:33.166Z A 2  
2013-08-09T13:51:33.166Z B 1  
2013-08-09T13:52:33.166Z C 6  
2013-08-09T13:53:33.166Z B 8  
2013-08-09T13:54:33.166Z B 5

Node.js入门主次

咱俩用Node.js编写八个Hello World程序,推行上边包车型客车下令:
nano hello.js
在展开的编辑器中输入下边包车型客车代码:

var http=require('http');  //引入http模块
http.createServer(function(request,response){   //创建服务器
   response.writeHead(200,{'Content-Type':'text/plain'}); //发送http头部,http状态值和内容类型
   response.end('Hello World'); //发送响应数据
}).listen(8000);//绑定监听端口
console.log('Server running at http://127.0.0.1:8000');  //终端打印

编纂完结后,按Ctrl+x,按y保存。在指令行终端中,执行:
node hello.js
下一场,展开1个浏览器,在地点栏中输入:
http://127.0.0.1:8000
大家得以见见浏览器显示出Hello
World。可是,那个程序只是成就了八个方可干活的http服务器,其余什么也远非做。

2. 编写http服务

// 加载http模块
var http = require("http");
http.createServer(function(req, resp){
    resp.writeHead(200, {"Content-Type" : "text/plain"});
    resp.end("Hello! I am a Node.js http server.\n");
}).listen(8080);
console.log("server running on 8080\n");

使用Express模块

Node.js本人固然提供了累累模块,如http,tcp等,但假使直白动用那个基本的模块来支付使用要求开销多量的时日,由此,大家将要采用一些其余模块来抓好开销功能,同时使得代码更简明。express就是与http对应的第1方主旨模块,用于拍卖http请求。
Express是八个轻巧利落的Node.js
Web应用开荒框架,它能够帮衬我们创设种种Web应用。小编们就使用Express作为HTTP协议的底子框架。

缘何要用Node.js

Node.js提供了壹种斩新的编写后端服务的方法,它并不必要你学习新的编制程序语言,只要熟练JavaScript就足现在端服务。
专注:Node.js仅仅是贰个JavaScript运维时环境,单纯安装它并不可能做如何。
唯独,使用Node.js内置的还是第壹方的模块,能够达成做过多有实际意义的职业。

安装Express模块

前提是现已不易安装了Node.js。在命令行终端中施行:
npm install express
此间我们用到了npm,上边大家要询问一下关于npm的学问。

常用的Node.js模块

一.fs模块,Node.js自带的模块,可用来访问文件系统(:在浏览器中进行的js代码是不可能访问文件系统的)。
二.http模块,Node.js自带的模块,用于营造http服务。
叁.Express框架,第一方模块,可使创立网址的进度十二分轻松,详见:http://expressjs.com/
4.koa,web框架,详见:http://koajs.com/
5.fastify,web框架,详见:https://github.com/fastify/fastify

关于npm

npm(Node Package
Manager)是及其Node.js一同安装的包管理工科具,它能一举成功Node.js代码安插上的大队人马标题,常见的行使场景如下:

允许用户从NPM服务器上下载外人编写的第一方包到本地用
允许用户从NPM服务器上下载并设置别人编写的指令行程序
允许用户将团结编写的包或指令行程序上盛传NPM服务器上

动用上面包车型大巴指令测试是或不是中标安装:
npm -v
应用npm命令安装模块:
npm install <Module Name>
那是本地安装,将安装包放在了./node_modules目录中(启动npm命令所在的目录,可因而require引进本地安装的包)
npm install <Module Name> -g
那是全局安装,将安装包放在了/usr/local下或你的node安装目录中,能够直接在命令行中使用。

注意:安装node模块时,如若钦赐了–save参数,则此模块将被加多到package.json文件中的dependencies列表中。今后公布到网上时,不须要将node_modules文件夹公布,程序会根据package.json文件中的依赖列表中模块名字及版本号,自动从网上下载安装。

写在终极

一.编辑在Node.js中运维的服务程序,纯熟通晓JavaScript语言是基础。
而且,编写的次第要服从JavaScript语言的照应标准和平条约定。例如:编写模块化程序。
myparser.js

// 将日志解析独立成一个模块
var Parser = function() {
};

// 解析文本
Parser.prototype.parse = function(text){
    var results = {};
    // 将文本分割为多行
    var lines = text.split("\n");
    lines.forEach(function(line){
        // 对每一行文本进行解析
        var parts = line.split(" ");
        var letter = parts[1];
        var count = parseInt(parts[2]);
        if(!results[letter]) {
            results[letter] = 0;
        }

        results[letter] += count;
    });

    // console.log(results);
    return results;
};

// 告诉Node.js输出文件中的构造函数
module.exports = Parser;

logparser.js

// 加载自定义的模块
var Parser = require("./myparser");
var fs = require("fs");

fs.readFile("D:\\Node.js\\workspace\\test-helloworld\\test.log", function(error, logData){
    if(error) {
        throw error;
    }

    var text = logData.toString();
    console.log(text);

    var parser = new Parser();
    var results = parser.parse(text);
    console.log(results);
});

二.在Node.js中还设有3个名称为npm的包管理工科具,那是Node.js暗许的,以JavaScript编写的软件包管理类别,能够类比java中的maven。npm会随着Node.js一同安装,npm模块仓库提供了三个名称叫“registry”的查询服务,用户可经过本地的npm命令下载并设置内定模块。其它用户也足以透过npm把温馨设计的模块分发到registry上边。
3.npm方可管理地点品种的所需模块并自动拥戴信赖情形,也得以管理全局安装的JavaScript工具。倘诺2个品类中设有package.json文件,那么用户能够一向运用npm
install命令自动安装和保卫安全当前项目所需的享有模块。在package.json文件中,开垦者能够钦定每一个重视项的本子范围,那样既能够保证模块自动更新,又不会因为所需模块功效大幅变动产生项目出现难题。开拓者也足以采纳将模块固定在有个别版本之上。

【参考】
http://www.csdn.net/article/2013-08-28/2816731-absolute-beginners-guide-to-Node.js
专门针对初学者的Node.js教程
https://zh.wikipedia.org/wiki/Npm npm维基百科

此外壹些npm相关命令

查阅全数全局安装的模块:npm ls -g
卸载模块:npm uninstall <Module Name>
履新模块:npm update <Module Name>
追寻模块:npm search <Module Name>

用npm命令npm ini能够生成package.json文件,包括基本结果。当然,package.json文件也足以友善手动制造,依照实际项目标须求,列出要求依靠的模块,然后经过$npm
install命令安装那个模块。

在服务端,我们要创立一些路由,以供客户端访问。

Express路由

路由(routing)是由二个UBMWX叁I(或叫路线)和多个一定的http方法(如GET、PUT)组成。涉及到应用怎样响应客户端对有个别网址节点的拜会。
路由的结构是:app.METHOD(PATH,HANDLER),
当中app是一个express实例,METHOD是有个别http请求格局中的一种(如GET、PUT、POST、DELETE),PATH是劳务器端的门径,HANDLEOdyssey是当路由至极到时实行的函数。
事例:创设二个app.js文件:

var express=require('express');
var app=express();

app.get('/api',function(req,res){
   res.send({led:false});
});
app.post('/api',function(req,res){
   res.send({led:false});
});
app.put('/api',function(req,res){
   res.send({led:false});
});
app.delete('/api',function(req,res){
   res.send({led:false});
});
app.listen(8000);

然后,运维这一个http服务,并开始展览测试:
node app.js
测试方法:
对于GET方法,能够在浏览器地址栏中输http://127.0.0.1:8000/api,回车后见到结果,或许在命令行终端窗口中,输入curl http://127.0.0.1:8081/api
对此POST、PUT和DELETE方法,均可用curl命令来测试。
curl -X POST[PUT][DELETE] -d '{"led":true}' -H "Content-Type:application/json" http://127.0.0.1:8000/api
乐趣是将二个数据为{led:true}、头为Content-Type:application/json的POST请求发送给服务器,代码中用req.body.led获取传过去的led值。
其间,-X 钦赐http的央浼格局
-d 传送的多寡
-H 自定义头新闻传送给服务器

大家创设的路由遵守REST API规范。

关于REST API

REST(Representational State
Transfer)即表征性状态传输,它是为了描述今世Web如何做事而提议的,它是壹种设计风格,不是壹种标准。受用户欢迎的网址,绝大很多都使用了那种作风的设计。REST依赖于HTTP协议的职能,使客户端和服务端的竞相供给服从一定的协商(大概说是规范)。如,GET方法用来获取(读取)财富,POST方法用来创建能源,PUT方法用来更新能源,DELETE方法用来删除能源。
规划RESTful
API的主假若陈设好U哈弗I,即钦赐财富间的关系。能源也便是数额,即能够储存到Computer中的事物。经常要听从一些暗中同意的规则:使用斜杠(/)来差距财富间的关系等。

除此以外,要求验证,Node服务端与数据库交互,大家应用mongoose模块。
安装mongoose:
npm install mongoose

如上内容参考了黄峰达的《本人入手设计物联网》相关内容以及网上财富,在此深表谢谢!

Your Comments

近期评论

    功能


    网站地图xml地图