因为最近有一个后端的接口任务要写,而在学习node之前,我们编写后端接口程序,都是用php,而php需要繁琐的环境配置。但是也有集成环境,比如xampp就有apache+php+mysql,足够支持一个微小的web应用了。
可是这次的接口是给手机app写的,那么意味着我们不需要提供类似apache服务器的功能,比如返回页面文件及其资源。取而代之,我们只需要按照接口规范返回指定的少量JSON数据即可。
这就如同java中,创建一个socket,然后listen一个端口一样。只要收到,就按照规则响应。“那你去用java啊“ ”JavaScript也事java(暴论)“
所以,最近开始学习一种新的后端平台,node.js是比较新的,而且好评如潮,是JavaScript的运行时平台。特地记录一下。
Node.js是一个事件驱动I/O服务端JavaScript环境,主要用于提供后端的服务。虽然其是单线程应用,但是因为大量的异步+回调函数的编程模式,使得node.js的并发处理能力非常优秀。除此之外,node.js还如同python一样,可以导入各种模块,大大减轻重复的造轮子,是快速开发的利器。
虽然node是单线程应用,但是因为其异步的模式,使得效能非常高。因为web应用往往伴随查询,存取等需要等待的操作。假设现在有三个并发的请求,每个请求都需要查询数据库,需要等待。
这样有效利用等待的时间,避免浪费资源,所以node是一个高效的服务平台。下面的图描述了三种服务器的工作机制
很简单,这次吸取了上次安装mongodb的教训,不下载压缩包手动安装了,直接用懒狗工具 apt-get来下载了
sudo apt-get install nodejs
下载完成后,我们还需要下载对应的模块安装工具nmp(类似python的pip),值得注意的是,新版的node.js好像自带npm,而我apt-get下载的版本似乎没有带。
sudo apt-get install npm
我们在当前目录下创建一个.js文件
sudo vim server.js
我们编写server.js文件
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type":"text/plain"});
response.write("hello world");
response.end();
}).listen(8888);
console.log('Server started');
其中http是我们引入的模块(自带模块),然后我们创建一个server,其中传入的是有客户端连接之后的回调函数。回调函数的request是用户的请求对象,而response是我们回复的对象。最后我们让server对象listen 8888 端口。
编写完成之后,我们运行node命令,启动server.js中代码描述的服务
node server.js
此时输出提示信息,我们可以在浏览器访问我们云主机的8888端口查看服务运行情况。
我们直接到node的官网上去下载即可。直接下载binary可执行文件。
下载之后解压,可以看到如下的文件,其中node.exe就是node的可执行文件了,和我们在ubuntu下运行无异。值得注意的是,这个版本的node自带了npm,我们无序再安装npm了
我们创建一个文件夹名叫htdocs,里面有一个子文件夹test,在test中,我们编写一个.js文件
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write('Hello World');
response.end();
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
然后我们回到node.exe所在的目录,我们打开cmd控制台,进入node.exe所在的目录
cd /d E:\node.js\node-v12.18.3-win-x64
然后我们和在ubuntu中启动一样,node + 文件路径 即可启动指定文件中描述的web服务了。
node htdocs/test/server.js
我们访问服务侦听的端口,即可看到我们的hello页面
在Windows或者Linux下,按下ctrl+c都可以直接退出,并且停止服务
node相比php还是方便一些。我们无序提供整个web服务器(比如apache或者nginx)去支持一个(php)接口。node直接就是socket级别对接口请求的处理了。而且node也有好用的框架比如express,更加简单的处理接口逻辑。当然这是后话了 之后再学习这些框架。。。