[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 ...
随机推荐
- windows2003 IIS6 部署MVC3和MVC4程序
1.服务器上安装SP2 和 IIS6 2.安装.Net Framework3.5 SP1(完整安装包,包含2.0 2.0SP1,237MB那个安装包) 3.安装.Net Framework4.0 4. ...
- 使用node-livereload自动刷新页面
1. 安装node 2. 安装python 3. 安装connect, serve-static和node-livereload (以下都假设命令行当前目录为e:\WebSite) e:\WebSit ...
- 隐藏Nginx版本号的安全性与方法
搭建好nginx或者apache,为了安全起见我们都会隐藏他们的版本号,这边讲的是nginx的版本号,如果你也想隐藏apache的版本号,那请点前面的链接.请看nginx版本号信息隐藏文章. Ngin ...
- iOS 数字每隔3位添加一个逗号的
+(NSString *)countNumAndChangeformat:(NSString *)num { ; long long int a = num.longLongValue; ) { co ...
- lpc1768的系统时钟
#define XTAL_FREQ 12000000 #define VECT_TAB_OFFSET 0x0000 void SystemInit(void) { //PLL0时钟配置 LPC_ ...
- swift新特性(__nullable和__nonnull
http://www.mamicode.com/info-detail-923593.html 最近在看老师写代码的时候经常遇到两个陌生的关键字,但是当我在我的电脑上敲得时候就是敲不出,后来才知道这是 ...
- 信息指纹(Fingerprint)及其应用
1.应用: i.网页地址去重 网页地址有100个字符,存储5000亿个网址本身需要50T的容量,而Hash表的存储效率只有50%,所有存储爬虫已经爬过的网址需要100T的 ...
- random 函数
Random()在Delphi中,有一随机函数,是这样定义的:function Random [ ( Range: Integer) ]; 其中,参数Range为一整数,该函数返回值也为整数,其范围为 ...
- 已知从BUF开始存放了10个字类型有符号数据,编程求出这10个数中的最大数和最小数(将最大数存入MAX字单元、最小数存入MIN字单元),并将其以10进制数的形式在屏幕上显示出来。
data segment pmax db 0dh,0ah , 'MAX : ','$' pmin db 0dh,0ah , 'MIN : ','$' buf ...
- VS2013 opencv2.4.8
[转]http://my.phirobot.com/blog/2014-02-opencv_configuration_in_vs.html vs2010+opencv2.4.0:http://www ...