// 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);
// node server.js
// 打开http://localhost:8888/,你会看到一个写着“Hello World”的网页~
就这么简单,本文 完~
oh,no
you too young, too simple
var http = require("http")
createServer
createServer
的参数
请求处理
onRequest() 函数被触发的时候,有两个参数对象response
// 发送一个HTTP状态200和HTTP头的内容类型
response.writeHead(200, {"Content-Type": "text/plain"});
// 添加HTTP主体内容
response.write("Hello World");
// 完成响应
response.end();
这一步我们把server.js变成一个真正的Node.js模块
函数封装
将我们的脚本封装到一个函数里面,然后导出该封装函数
var http = require("http");
function start() {
function onRequest(request, response) {
console.log("Request received.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
模块引用
// 如主文件名为index.js,写入
var server = require("./server");
server.start();
执行 node index.js
所有请求数据都在 request对象中,数据解析,还需要 url, querystring模块
来,我们试一试找出浏览器的请求路径~
var http = require("http");
var url = require('url')
function start(){
function onRequest(req, res){
var url = url.parse(req.url)
// 打印 url 信息
console.log('server start url', url)
res.writeHead(200, {"content-type": "text/plain"})
res.end()
}
http.createServer(onRequest).listen(8888)
}
exports.start = start
request.url参数打印:
引入路由处理
// server.js
var http = require("http");
var url = require('url')
function start(route){
function onRequest(req, res){
var pathname = url.parse(req.url).pathname
route(pathname)
res.writeHead(200, {"content-type": "text/plain"})
res.end()
}
http.createServer(onRequest).listen(8888)
}
exports.start = start
// route.js
function route(pathname){
console.log('route', pathname)
}
exports.route = route
// index.js 引入route
var server = require('./server')
var router = require('./route')
server.start(router.route)
以上代码我们实现了有路可寻
为了避免多重的 if..else..,我们通过对象传递一系列请求
server 中调用 route 的处理结果
// requestManager.js
function start(){
console.log('route-----start')
return 'hello start'
}
function next(){
console.log('route-----next')
return 'hello next'
}
exports.start = start
exports.next = next
// index.js
var server = require('./readfile')
var router = require('./route')
var requestManager = require('./requestManager')
var managers = []
managers['/'] = requestManager.start
managers['/start'] = requestManager.start
managers['/next'] = requestManager.next
server.start(router.route, managers)
// http://localhost:8888/start, 浏览器会输出“hello start”
// http://localhost:8888/next 会输出“hello next”
// http://localhost:8888/chaoran 会输出“404”。
manager :每一个路由提供对应的处理函数
// server.js
var http = require("http");
var url = require('url')
function start(route, manager){
function onRequest(req, res){
var pathname = url.parse(req.url).pathname
console.log('server request for', pathname)
var content = route(pathname, manager)
res.writeHead(200, {"content-type": "text/plain"})
res.write(content)
res.end()
}
http.createServer(onRequest).listen(8888)
}
exports.start = start
取出managers 中的路由事件进行处理
// route.js
function route(pathname, managers){
console.log('rrr', pathname)
if(typeof managers[pathname] == 'function'){
return managers[pathname]()
}else {
console.log('managers no found')
return ''
}
}
exports.route = route
好啦,用是能用的,就是偶尔会挂 ( ﹁ ﹁ ) ~→
至于node中的并行及如何实现非阻塞,下次我们结合实例来学习~
参考:
原文:https://www.cnblogs.com/chaoran/p/9394987.html