node.js http服务
来源:互联网 发布:淘宝御泥坊官网 编辑:程序博客网 时间:2024/05/17 21:56
Http是互联网时代使用最广泛的协议,没有之一。
Node.js内置了http模块,因此使用node.js搭建一个http服务非常简单。
一、http实例
照旧,先来一个http的"Hello world!",创建http.js文件,代码如下:
//调用http模块var http = require('http');var server = http.createServer();server.on('request', function(request, response) { // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 发送响应数据 "Hello World !" response.end('Hello World !');}).listen(8000);console.log('Http server is started.');
lee@mypc ~/works/nodejs/study4 $ node http.js Http server is started.
这时可以看到程序打印完"Http server is started"并没有结束,而是一直占据进程(监听8000端口)。
然后我们另起一个terminal,用curl测试http服务:
lee@mypc ~/works/nodejs/study4 $ curl "http://localhost:8000"Hello World !
成功打印出"Hello world !"
二、get请求
创建另一个文件http_get.js。
然后实现逻辑,接收到http请求后先判断request.method,如果不是GET则返回404。如果是GET请求,则用url模块获取参数,并返回接收到的参数。
代码如下:
//调用http模块var http = require('http');//调用url模块var url = require('url');var server = http.createServer();server.on('request', function(request, response) { if(request.method == 'GET') { var params = url.parse(request.url, true).query; params = JSON.stringify(params); //服务端打印参数 console.log('Get params:'+params); // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 把请求参数返回给客户端 response.end(params+'\n'); } else{ response.writeHead(404, {'Content-Type': 'text/plain'}); response.end('Not found !\n'); }}).listen(8000);console.log('Http server is started.');
运行http_get.js:
lee@mypc ~/works/nodejs/study4 $ node http_get.js Http server is started.
用curl测试get得到正确结果:
lee@mypc ~/works/nodejs/study4 $ curl "http://localhost:8000?id=1&name=2"{"id":"1","name":"2"}
测试post请求则得到"Not found":lee@mypc ~/works/nodejs/study4 $ curl -d "" "http://localhost:8000"Not found !
三、post请求
创建一个文件http_post.js。
然后实现逻辑,接收到http请求后先判断request.method,如果不是POST则返回404。如果是POST请求,则获取http body,并返回接收到的内容。
代码如下:
//调用http模块var http = require('http');var server = http.createServer();server.on('request', function(request, response) { if(request.method == 'POST') { var data_post = ''; request.on('data', function(data){ data_post += data; }); request.on('end', function(){ //服务端打印参数 console.log('Get body:'+data_post); // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 把请求参数返回给客户端 response.end(data_post+'\n'); }) } else{ response.writeHead(404, {'Content-Type': 'text/plain'}); response.end('Not found !\n'); }}).listen(8000);console.log('Http server is started.');
运行http_post.js:
lee@mypc ~/works/nodejs/study4 $ node http_post.js Http server is started.
用curl测试post得到正确结果:
lee@mypc ~/works/nodejs/study4 $ curl -d '{"username":"lee","id":1}' "http://localhost:8000"{"username":"lee","id":1}
测试get请求则得到"Not found":
lee@mypc ~/works/nodejs/study4 $ curl "http://localhost:8000?id=1&name=2"Not found !
Node.js提供了一个简单的模块系统,可以让node.js的文件可以相互调用。模块是node.js应用程序的基本组成部分,文件与模块一一对应。也就是说一个文件就是一个模块,这些文件可以是JavaScript、json或者编译过的c/c++文件。
- 模块调用
有一个模块hello.js:
<code class=" language-javascript" style="padding: 0px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; background-color: transparent;">exports<span class="token punctuation">.</span>sayhello <span class="token operator">=</span> <span class="token keyword" style="color: rgb(102, 217, 239);">function</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function" style="color: rgb(230, 219, 116);">log</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'Hello, '</span><span class="token operator">+</span>name <span class="token operator">+</span><span class="token string" style="color: rgb(166, 226, 46);">'.'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code>
<code class=" language-javascript" style="padding: 0px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; background-color: transparent;"><span class="token keyword" style="color: rgb(102, 217, 239);">var</span> hello <span class="token operator">=</span> <span class="token function" style="color: rgb(230, 219, 116);">require</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'./hello'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>hello<span class="token punctuation">.</span><span class="token function" style="color: rgb(230, 219, 116);">sayhello</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'James'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>
运行效果如下:
<code class=" language-bash" style="padding: 0px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; background-color: transparent;">lee@mypc ~/works/nodejs/study5 $ node main.jsHello, James.</code>
另一种写法,main2.js:
<code class=" language-javascript" style="padding: 0px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; background-color: transparent;"><span class="token keyword" style="color: rgb(102, 217, 239);">var</span> sayhello <span class="token operator">=</span> <span class="token function" style="color: rgb(230, 219, 116);">require</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'./hello'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>sayhello<span class="token punctuation">;</span><span class="token function" style="color: rgb(230, 219, 116);">sayhello</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'James'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>
- 路径
跟其它编程语言一样,有相对路径和绝对路径
相对路径之当前目录:
<code class=" language-javascript" style="padding: 0px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; background-color: transparent;"><span class="token keyword" style="color: rgb(102, 217, 239);">var</span> hello <span class="token operator">=</span> <span class="token function" style="color: rgb(230, 219, 116);">require</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'./hello'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>或
<code class=" language-javascript" style="padding: 0px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; background-color: transparent;"><span class="token keyword" style="color: rgb(102, 217, 239);">var</span> hello <span class="token operator">=</span> <span class="token function" style="color: rgb(230, 219, 116);">require</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'./hello.js'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>
相对路径之上级目录:
<code class=" language-javascript" style="padding: 0px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; background-color: transparent;"><span class="token keyword" style="color: rgb(102, 217, 239);">var</span> hello <span class="token operator">=</span> <span class="token function" style="color: rgb(230, 219, 116);">require</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'../study5/hello'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>或
<code class=" language-javascript" style="padding: 0px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; background-color: transparent;"><span class="token keyword" style="color: rgb(102, 217, 239);">var</span> hello <span class="token operator">=</span> <span class="token function" style="color: rgb(230, 219, 116);">require</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'../study5/hello.js'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>
绝对路径:
<code class=" language-javascript" style="padding: 0px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; background-color: transparent;"><span class="token keyword" style="color: rgb(102, 217, 239);">var</span> hello <span class="token operator">=</span> <span class="token function" style="color: rgb(230, 219, 116);">require</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'/home/lee/works/nodejs/study5/hello'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>或
<code class=" language-javascript" style="padding: 0px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; direction: ltr; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; background-color: transparent;"><span class="token keyword" style="color: rgb(102, 217, 239);">var</span> hello <span class="token operator">=</span> <span class="token function" style="color: rgb(230, 219, 116);">require</span><span class="token punctuation">(</span><span class="token string" style="color: rgb(166, 226, 46);">'/home/lee/works/nodejs/study5/hello.js'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>
0 0
- node.js http服务
- 基于 Node.js 搭建 HTTP/2服务
- <<node.js探秘>>(02).建立一个http站点服务.
- javascript,第一个基于node.js的Http服务
- node.js http请求详解和配置服务目录
- 使用node.js快速搭建简易本地HTTP服务
- Node -- 构建HTTP服务
- 启动node.js服务
- Node.js HTTP服务器
- Node.js HTTP客户端
- node.js学习(HTTP)
- Node.js Http 介绍
- node .js 学习 http
- node.js http
- Node.js HTTP模块
- node.js http
- Node.js之HTTP
- node.js http客户端
- Java单例模式中的线程安全问题
- Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils
- 【Get深一度】信号处理(一)——能量信号与功率信号的区别
- warning: no umbrella header found for target 'xxxxx', module map will not be generated
- Myeclipse中导入项目后WebRoot报错了
- node.js http服务
- angular api
- 卢卡斯定理
- (转载)hive文件存储格式
- APUE------进程关系
- Spinner的添加
- SQL查询优化:如何写出高性能SQL语句
- 合并两个排序的链表
- 智能指针的发展