[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 ...
随机推荐
- Zipf’s Law
Let f(w) be the frequency of a word w in free text. Suppose that all the words of a text are ranked ...
- 五、pig学习
一.什么是pig 1.pig和sql.map-reduce的关系 来自为知笔记(Wiz)
- 你会做Web上的用户登录功能吗?
Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...
- STM32驱动AT24CXX系列芯片
AT24Cxx系列EEPROM是由美国Mcrochip公司出品,1-512K位的支持I2C总线数据传送协议的串行CMOS E2PROM,可用电擦除,可编程自定时写周期(包括自动擦除时间不超过10ms, ...
- Mac OS X窗口最小化方法的几个快捷键
大家都知道在 OS X 系统中,点击窗口左上角中间的小黄按钮就可以最小化当前窗口.而事实上,还有一些比点击这个按钮更快的窗口最小化方法.这里一起分享给大家! 使用快捷键 Command+M,可以实现快 ...
- Intent的概念及应用(一)
------siwuxie095 1.显式Intent (1)先创建一个项目:LearnIntent,选择API:21 Android 5.0, 选择Empty Activity,完成 (2)创建一个 ...
- SPOJ839 OPTM - Optimal Marks
传送门 闵神讲网络流应用的例题,来水一水 要写出这道题,需要深入理解两个概念,异或和最小割. 异或具有相对独立性,所以我们把每一位拆开来看,即做大概$32$次最小割.然后累加即可. 然后是最小割把一张 ...
- ARM处理器简介
参考: http://www.arm.com/zh/products/processors/instruction-set-architectures/index.php 1.ARM核演变图 2.AR ...
- java制作二维码的两种方式
原博:http://www.importnew.com/15028.html Zebra Crossing(ZXing)是一个很棒的,几乎可以在所有平台(Android.JavaSE.iPhone.R ...
- Linux FTP 服务器配置简单说明
一. FTP 说明 linux 系统下常用的FTP 是vsftp, 即Very Security File Transfer Protocol. 还有一个是proftp(Profession ftp ...