[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 ...
随机推荐
- Win7下 IIS+PHP(ZendLoader)+MySQL
这里使用的是傻瓜式安装方式 下载php-5.3.18-nts-Win32-VC9-x86.msi,Win7下可执行文件.(下载地址 http://pan.baidu.com/s/1qvJCA) 执行到 ...
- How difficult is it to create a JavaScript framework?
分享来自 quora 的一篇文章 https://www.quora.com/How-difficult-is-it-to-create-a-JavaScript-framework https:// ...
- PHP foreach 遍历数组是打印出相同的数据
https://www.toptal.com/php/10-most-common-mistakes-php-programmers-make PHP makes it relatively easy ...
- Cocos2dx 3.1.1 将一个2.X的项目改成3.1版本
最近在论坛上下载到了一个Cocos2dx的单机跑酷例子, 也不知道是2.x版的, 花了一天时间试着把他改成3.1.1的试试, 现在已经可以顺利编译的, 但是还是有Heap Free的问题,调试了好几天 ...
- 用于辅助在 bootstrap-dialog 中的表现:app-jquery-dialog.js
// 用于通某个元素共享配置数据 $.extend($.fn, { formOption : function(showOpt) { var opt = $.data(this[0], "f ...
- Android SQLITE数据类型
2011-6-24 15:14:00来源:Sql SQLITE数据类型 SQLite与其他常见的DBMS的最大不同是它对数据类型的支持.其他常见的DBMS通常支持强类型的数据,也就是每一列的类型都 ...
- 怎么把自己电脑上开发的项目发布到自己电脑IIS上面?
windowsxp中: 步骤: 1.新建一个文件夹,把项目发布到里面(发布的时候需要注意的是: ) 注意:发布方法要选择:文件系统 目标位置选择:你新建来发布的那个文件夹名称 2.在IIS中新建网站 ...
- js中,怎么解决cookie里面中文乱码问题
呵呵,我查了百度和谷歌,都没找到解决方案,但是,最终直接结合两个函数就可以了,哈哈哈,开心ing function getCookie(name) { var prefix = name + &quo ...
- iOS开发网络篇之文件下载、大文件下载、断点下载
from: http://www.jianshu.com/p/f65e32012f07
- poj2528 Mayor's posters(线段树区间覆盖)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 50888 Accepted: 14737 ...