[nodejs] day1-创建服务器
一、使用匿名函数(新建文件service.js)创建一个服务器:
var http = require("http"); //Node.js自带的 http 模块,并且把它赋值给 http 变量
//使用匿名函数的方法
http.createServer(function(request, response){ //调用http模块提供的函数: createServer
console.log("Request received");
response.writeHead(200,{"Content-Type":"text/plain"});
response.write("hello world");
response.end();
}).listen(8088); //指定这个HTTP服务器监听的端口号
运行node service.js,在浏览器输入127.0.0.1:8088,就可以看到熟悉的hello world了~
二、使用非匿名函数(新建文件service.js)创建服务器:
var http = require("http"); //Node.js自带的 http 模块,并且把它赋值给 http 变量
//使用传递函数的方法
var myfunction = function(request, response){
response.writeHead(200,{"Content-Type":"text/plain"});
response.write("hello");
response.end();
}
var myservice = http.createServer(myfunction);
myservice.listen(8088);
运行node service.js,在浏览器输入127.0.0.1:8088,就可以看到熟悉的hello world了~
三、使用模块分离的方式来创建一个服务器,新建service.js,输入:
var http = require("http"); //Node.js自带的 http 模块,并且把它赋值给 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(8088);
console.log("Server has started.");
}
exports.start = start;//模块函数导出
创建index.js ,输入:
var service = require("./service");
service.start();
运行node index.js,在浏览器输入127.0.0.1:8088,就可以看到熟悉的hello world了~
四、为服务器增加一个路由模块,并注入到service.js中:
service.js:
var http = require("http"); //Node.js自带的 http 模块,并且把它赋值给 http 变量
var url = require("url");//对路由进行解析的模块
function start(route){ //传递了一个参数给start,在index.js中,回把路由注入进去
function onRequest(request,response){
/*
* 对于一个URL: http://localhost:8088/start?foo=bar&hello=world
* 以下的pathname得到的是"start"
* */
var pathname = url.parse(request.url).pathname;
console.log("Request for "+pathname+"received");
route(pathname);//将参数传递给路由
console.log('Request received.')
response.writeHead(200,{"Content-Type":"text/plain"});
response.write("hello world");
response.end();
}
http.createServer(onRequest).listen(8088);
console.log("Server has started.");
}
exports.start = start;
route.js:
function route(pathname){
console.log("About to route a request for "+pathname);
}
exports.route = route;
最后,index.js:
var service = require("./service");//使service模块可以被注入到服务器中
var route = require("./route");//使route模块可以被注入到服务器中
service.start(route.route);
运行node index.js,启动服务,在浏览器中输入 http://localhost:8088/start?foo=bar&hello=world,
在交互窗口可以看到输入的对路由的解析哦~
五、为服务器将路由模块和路由的处理函数分离开来,用数组关联在一起(松耦合)
路由对应的处理方法:requestHandles.js
//为不同请求提供出来方法
function start(){
console.log("Request handler 'start' was called.");
}
function upload(){
console.log("Request handler 'upload' was called.");
}
exports.start = start;
exports.upload = upload;
将路由处理方法和路由的路径耦合在一起,index.js:
var service = require("./service");//使service模块可以被注入到服务器中
var route = require("./route");//使route模块可以被注入到服务器中
var requestHandlers = require("./requestHandlers");
var handle = {}
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
service.start(route.route, handle);
路由处理,route.js:
function route(handle,pathname){
console.log("About to route a request for "+pathname);
if(typeof handle[pathname] === 'function'){
handle[pathname]();
}else{
console.log("No request handler found for "+pathname);
}
}
exports.route = route;
service.js:
var http = require("http"); //Node.js自带的模块,并且把它赋值给变量
var url = require("url");
function start(route, handle){ //依赖注入,将路由和处理都注入
function onRequest(request,response){
/*
* 对于一个URL: http://localhost:8088/start?foo=bar&hello=world
* 以下的pathname得到的是"start"
* */
var pathname = url.parse(request.url).pathname;
console.log("Request for "+pathname+"received");
route(handle,pathname);//将参数传递给路由
console.log('Request received.')
response.writeHead(200,{"Content-Type":"text/plain"});
response.write("hello world");
response.end();
}
http.createServer(onRequest).listen(8088);
console.log("Server has started.");
}
exports.start = start;
入口模块:index.js
var service = require("./service");//使service模块可以被注入到服务器中
var route = require("./route");//使route模块可以被注入到服务器中
var requestHandlers = require("./requestHandlers");
var handle = {}
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
service.start(route.route, handle);
[nodejs] day1-创建服务器的更多相关文章
- nodeJs中创建服务器
var http=require('http'); var httpObj=http.createServer(function(req,res) { console.log('someBody:' ...
- 用nodejs创建服务器显示html页面
nodejs版本:v10.14.2 1.首先准备一个简单的html页面 <!DOCTYPE html> <html lang="en"> <head& ...
- Nodejs学习笔记(3) 创建服务器:Web 模块(http)与 express 框架
目录 参考资料 1. 使用 http 模块创建服务器 1.1 实现思路及代码 1.2 HTTP 结构 1.2.1 Request中的重要字段 1.2.2 Response 头信息:文件类型.状态码.连 ...
- nodejs+express创建一个简单的服务器
//首先安装express //1.引入express const express = require('express'); //2.创建服务器对象 let server = express(); ...
- 【nodejs】创建第一个应用
我已经安装好了nodejs(采用安装包的方式),并在idea中安装好nodejs插件,具体参考我的随笔: http://www.cnblogs.com/yujihang/p/7011356.html ...
- 在nodejs中创建child process
目录 简介 child process 异步创建进程 同步创建进程 在nodejs中创建child process 简介 nodejs的main event loop是单线程的,nodejs本身也维护 ...
- 在nodejs中创建cluster
目录 简介 cluster集群 cluster详解 cluster中的event cluster中的方法 cluster中的属性 cluster中的worker 总结 在nodejs中创建cluste ...
- NodeJS搭建HTTPS服务器
[NodeJS搭建HTTPS服务器] http://cnodejs.org/topic/54745ac22804a0997d38b32d
- nodejs,node原生服务器搭建实例
nodejs,node原生服务器搭建实例
- java20 创建服务器:ServerSocket
创建服务器:ServerSocket import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...
随机推荐
- NIPS 2016论文:英特尔中国研究院在神经网络压缩算法上的最新成果
NIPS 2016论文:英特尔中国研究院在神经网络压缩算法上的最新成果 http://www.leiphone.com/news/201609/OzDFhW8CX4YWt369.html 英特尔中国研 ...
- Python之路【第三篇】:模块
定义: 包:包含__init__.py文件.模块(也是.py文件) 当包被其它模块调用时,首先会执行该包下的__init__文件 包含有模块,包可以有多级 模块的导入: import from...i ...
- CentOS7 开源跳板机(堡垒机) Jumpserver
开源跳板机(堡垒机)Jumpserver 环境 CentOS 7 x64 关闭 selinux firewalld jumpserver: 172.24.0.14 testserve ...
- 基于LNMP的Zabbbix之PHP源码安装
安装一些依赖的包 wget -c ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz .tar.gz -C ../source/ cd ../source/l ...
- [iOS Animation]-CALayer 显示方式
寄宿图 图片胜过千言万语,界面抵得上千图片 ——Ben Shneiderman 我们在第一章『图层树』中介绍了CALayer类并创建了一个简单的有蓝色背景的图层.背景颜色还好啦,但是如果它仅仅是展现了 ...
- Xcode--Alcatraz来管理Xcode插件
简介 Alcatraz是一个帮你管理Xcode插件.模版以及颜色配置的工具.它可以直接集成到Xcode的图形界面中,让你感觉就像在使用Xcode自带的功能一样. 安装和删除 使用如下的命令行来安装Al ...
- webstorm安装express报错
.... Exit code: -1 解决方法: webstorm创建express 需要 预先安装express-generator npm install express-generator -g
- Memcached源码分析之内存管理
先再说明一下,我本次分析的memcached版本是1.4.20,有些旧的版本关于内存管理的机制和数据结构与1.4.20有一定的差异(本文中会提到). 一)模型分析在开始解剖memcached关于内存管 ...
- js prototype 和constructor
1.function 和object 都有 constructor 和prototype 2. var a=new Animal() (animal 是function或Object) a 有 con ...
- 无锁同步-C++11之Atomic和CAS
1.概要 本文是无锁同步系列文章的第一篇,主要探讨C++11中的Atomic. 我们知道在C++11中引入了mutex和方便优雅的lock_guard.但是有时候我们想要的是性能更高的无锁实现,下面我 ...