[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 ...
随机推荐
- HDU 5621 KK's Point
N个点中任意选取四个点,就能产生一个圆内的交点,所以圆内总共有C(N,4)个交点,圆上有N个,相加就可以了. 注意:组合数运算的时候会爆longlong,中间先除一下就可以了. #include &l ...
- OSD(On Screen Display )技术(转)
源:OSD(On Screen Display )技术 OSD 是 On Screen Display 的缩写,是应用在 CRT/LCD 显示器上,在显示器的荧幕中产生一些特殊的 字形或图形,让使用者 ...
- Warning: Attempt to present on whose view is not in模态跳转问题
错误分析: controller A present controller B ,前提是A的view要存在,如果不存在,就会报这个错. 解决方法: 将 ...
- [转]六款常用的linux C/C++ IDE
之前在windows下开发习惯啦,linux改用vim开发代码,但是前期还是不熟悉看代码效率感觉有点低.由于看代码需要各种跳转查找我个人觉得还是IDE方便些,以前在windows下就挺喜欢使用code ...
- 完美分割字符串,实现字符串的splict功能
class Str:Client_C { string val; string[] str = new string[100]; public void StrT1() { //1.正常情况 //2. ...
- STM32的优先级NVIC_PriorityGroupConfig
关于STM32的中断优先级 1.STM32中每一个中断都有一个专门的寄存器,(Interrupt Priority Register),来描述该中断的占先式优先级和副优先级,在这个寄存器中STM32使 ...
- 基于libUSB的USB设备固件更新程序(下载数据)(转)
源:基于libUSB的USB设备固件更新程序(下载数据) 本文紧接上一篇日志:基于libUSB-Win32的USB设备固件更新程序(前言),相关背景以及起因等,此处不再赘述,如感兴趣请移步. libU ...
- pip安装icu失败:Command "python setup.py egg_info" failed with error code 1 in
问题 Mac 下通过 pip 安装 icu 失败. 解决办法及原因 问题的原因是因为icu库中的某一行代码找不到一个文件,获取不到ICU_VERSION的值. # Install icu brew i ...
- _foreach
从JDK1.5之后增加的foreach循环取消索引 for(类型 变量 : 数组 | 集合){ 每一次循环会自动将数组内容设置给变量 } 范例: ,,,} ; for(int x : i){ Syst ...
- border-radius归纳
一.基本语法 1.1 语法 解释 border-radius:10px 将创建四个大小一样的圆角. border-radius:10px 15px 10px 5px; 四个值分别表示左上角.右上角.右 ...