这一部分,我们先来学习创建服务端的基本知识,下一部分,将给出实际用到的服务端代码及其分析。
我们使用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
以上内容参考了黄峰达的《自己动手设计物联网》相关内容以及网上资源,在此深表感谢!