HTTP
摘要:1、最近今天三四天都在看Nodejs里面的HTTP这个模块,从官方文档到翻译的中文版本(英文文档虽然对我来说有点难度,但是要坚持,然后在看中文文档,在返过来看英文文档,为的就是提高英文技术文档的阅读能力,谁让好的氛围都是用英语交流呢?);
2、原来做demo的时候,只是引用http、express模块,然后监听“端口”,“主机名”;然后启动Node,在浏览器上输入URL;就算放到服务器上面running了;当时以为这就是Node,现在想想真脸红;主要是先入为主的原因,以为能在服务器上跑了,能操作mySql就算是会了Node;express-主要是解决了请求路由和视图模板,参考文章:
http://www.cnblogs.com/hyddd/p/4237099.html
做demo时候的理解:
这么看也没有错,用了express框架后,感觉很简单;但是更多的操作就没有了,比如说文件的上传,解析,等等……;后面我会继续学习,记日志,做demo;
nodejs–http.js
'use strict';
exports.IncomingMessage = require('_http_incoming').IncomingMessage;
exports.OutgoingMessage = require('_http_outgoing').OutgoingMessage;
exports.METHODS = require('_http_common').methods.slice().sort();
const agent = require('_http_agent');
exports.Agent = agent.Agent;
exports.globalAgent = agent.globalAgent;
const server = require('_http_server');
exports.ServerResponse = server.ServerResponse;
exports.STATUS_CODES = server.STATUS_CODES;
exports._connectionListener = server._connectionListener;
const Server = exports.Server = server.Server;
exports.createServer = function(requestListener) {
return new Server(requestListener);
};
const client = require('_http_client');
const ClientRequest = exports.ClientRequest = client.ClientRequest;
exports.request = function(options, cb) {
return new ClientRequest(options, cb);
};
exports.get = function(options, cb) {
var req = exports.request(options, cb);
req.end();
return req;
};
- 引用http.js模块:const http = require(“http”);(这里不讲解requirejs的用法,基础知识自行了解这里的“http”应该是路径下面的httpjs文件)
- 上面的代码段就是http的模块,exports对象下面的方法都可以调用,相当于是const http = exports[“索引值”];这样定义的http就具有了这个模块中exports对象下面的所有方法,属性了;真心的方便;
- 上面代码段中凡是涉及 const XX = require(“XX”);你都可以去查找到源码,(上github.com中搜索node-找到最多关注的git库,里面就是源码;查找文件可以按键盘上的“t”键搜索);
- 上面的简单用法,以及源码在哪里已经交代了,后面就不提及了,下面简单的用http模块创建一个服务;http.createServer()
`const server = require('_http_server');
exports.createServer = function(requestListener) {
return new Server(requestListener);
};`//返回了一个实例化的 Server()方法;
//===========================demo
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end("hello");
});
server.listen(8000,"127.0.0.1");
- //启动Node,然后在浏览器上启动127.0.0.1:8000;就可以看到”hello”,这里的res.end();是响应后关闭,不然前端一直会请求,后台的响应到不了前端;看图对比
- 从图上我们可以清晰的看到,res.end();后-响应返回(关闭响应的那张图),具有完整的信息;
- 对请求的链接做条件判断,自己动动手输入,看看;
const server = http.createServer((req, res) => {
if(req.url == "/"){
console.log(req.method);//GET
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end("hello");
}else if(req.url == "/index"){
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end("hello index");
//http://127.0.0.1:8000/index
}else{
res.writeHead(404, {'Content-Type': 'text/plain'})
res.end("404 Not Found");
}
});
server.listen(8000,"127.0.0.1");
6. 如果要区别对待Http method,可以根据 request.method 判断(看上面req.method)。至此,Http module在此场景下的短板显露无疑。这个时候express模块就很好了,有兴趣的自己看,后面有时间会看看源码,做做demo;