我的物联网综合知识之创建服务端1

这一部分,我们先来学习创建服务端的基本知识,下一部分,将给出实际用到的服务端代码及其分析。
我们使用Node.js来创建服务端。

Node.js是运行在服务端的JavaScript,它是一个基于Chrome JavaScript运行时建立的一个平台,是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,执行JavaScript的速度非常快,性能非常好。

Node.js安装

在Ubuntu等linux系统中,安装非常简单。在命令行终端中直接执行下面的安装命令就可以了。
sudo apt-get install nodejs
安装完成后,可以查看一下当前的Node版本:
node -v

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
然后,打开一个浏览器,在地址栏中输入:
http://127.0.0.1:8000
我们可以看到浏览器显示出Hello World。但是,这个程序只是完成了一个可以工作的http服务器,其它什么也没有做。

使用Express模块

Node.js自身虽然提供了很多模块,如http,tcp等,但如果直接使用这些基本的模块来开发应用需要花费大量的时间,因此,我们就要使用一些别的模块来提高开发效率,同时使得代码更简洁。express就是与http对应的第三方核心模块,用于处理http请求。
Express是一个简洁灵活的Node.js Web应用开发框架,它可以帮助我们创建各种Web应用。我们就使用Express作为HTTP协议的基础框架。

安装Express模块

前提是已经正确安装了Node.js。在命令行终端中执行:
npm install express
这里我们用到了npm,下面我们要了解一下有关npm的知识。

关于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文件中的依赖列表中模块名字及版本号,自动从网上下载安装。

其它一些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)是由一个URI(或叫路径)和一个特定的http方法(如GET、PUT)组成。涉及到应用如何响应客户端对某个网站节点的访问。
路由的结构是:app.METHOD(PATH,HANDLER), 其中app是一个express实例,METHOD是某个http请求方式中的一种(如GET、PUT、POST、DELETE),PATH是服务器端的路径,HANDLER是当路由匹配到时执行的函数。
例子:创建一个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的关键是设计好URI,即指定资源间的关系。资源也就是数据,即可以存储到计算机中的事物。通常要遵循一些默认的规则:使用斜杠(/)来区分资源间的关系等。

另外,需要说明,Node服务端与数据库交互,我们使用mongoose模块。
安装mongoose:
npm install mongoose

以上内容参考了黄峰达的《自己动手设计物联网》相关内容以及网上资源,在此深表感谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容