一、使用匿名函数(新建文件service.js)创建一个服务器:

  1. var http = require("http"); //Node.js自带的 http 模块,并且把它赋值给 http 变量
  2. //使用匿名函数的方法
  3. http.createServer(function(request, response){ //调用http模块提供的函数: createServer
  4. console.log("Request received");
  5. response.writeHead(200,{"Content-Type":"text/plain"});
  6. response.write("hello world");
  7. response.end();
  8. }).listen(8088); //指定这个HTTP服务器监听的端口号

运行node service.js,在浏览器输入127.0.0.1:8088,就可以看到熟悉的hello world了~

二、使用非匿名函数(新建文件service.js)创建服务器:

  1. var http = require("http"); //Node.js自带的 http 模块,并且把它赋值给 http 变量
  2.  
  3. //使用传递函数的方法
  4. var myfunction = function(request, response){
  5. response.writeHead(200,{"Content-Type":"text/plain"});
  6. response.write("hello");
  7. response.end();
  8. }
  9. var myservice = http.createServer(myfunction);
  10. myservice.listen(8088);

运行node service.js,在浏览器输入127.0.0.1:8088,就可以看到熟悉的hello world了~

三、使用模块分离的方式来创建一个服务器,新建service.js,输入:

  1. var http = require("http"); //Node.js自带的 http 模块,并且把它赋值给 http 变量
  2. function start(){
  3. function onRequest(request,response){
  4. console.log('Request received.')
  5. response.writeHead(200,{"Content-Type":"text/plain"});
  6. response.write("hello world");
  7. response.end();
  8. }
  9.  
  10. http.createServer(onRequest).listen(8088);
  11. console.log("Server has started.");
  12. }
  13.  
  14. exports.start = start;//模块函数导出

创建index.js ,输入:

  1. var service = require("./service");
  2. service.start();

运行node index.js,在浏览器输入127.0.0.1:8088,就可以看到熟悉的hello world了~

四、为服务器增加一个路由模块,并注入到service.js中:

service.js:

  1. var http = require("http"); //Node.js自带的 http 模块,并且把它赋值给 http 变量
  2. var url = require("url");//对路由进行解析的模块
  3. function start(route){ //传递了一个参数给start,在index.js中,回把路由注入进去
  4. function onRequest(request,response){
  5. /*
  6. * 对于一个URL: http://localhost:8088/start?foo=bar&hello=world
  7. * 以下的pathname得到的是"start"
  8. * */
  9. var pathname = url.parse(request.url).pathname;
  10. console.log("Request for "+pathname+"received");
  11.  
  12. route(pathname);//将参数传递给路由
  13.  
  14. console.log('Request received.')
  15. response.writeHead(200,{"Content-Type":"text/plain"});
  16. response.write("hello world");
  17. response.end();
  18. }
  19.  
  20. http.createServer(onRequest).listen(8088);
  21. console.log("Server has started.");
  22. }
  23.  
  24. exports.start = start;

route.js:

  1. function route(pathname){
  2. console.log("About to route a request for "+pathname);
  3. }
  4.  
  5. exports.route = route;

最后,index.js:

  1. var service = require("./service");//使service模块可以被注入到服务器中
  2. var route = require("./route");//使route模块可以被注入到服务器中
  3. service.start(route.route);

运行node index.js,启动服务,在浏览器中输入 http://localhost:8088/start?foo=bar&hello=world,

在交互窗口可以看到输入的对路由的解析哦~

五、为服务器将路由模块和路由的处理函数分离开来,用数组关联在一起(松耦合)

路由对应的处理方法:requestHandles.js

  1. //为不同请求提供出来方法
  2. function start(){
  3. console.log("Request handler 'start' was called.");
  4. }
  5.  
  6. function upload(){
  7. console.log("Request handler 'upload' was called.");
  8. }
  9.  
  10. exports.start = start;
  11. exports.upload = upload;

将路由处理方法和路由的路径耦合在一起,index.js:

  1. var service = require("./service");//使service模块可以被注入到服务器中
  2. var route = require("./route");//使route模块可以被注入到服务器中
  3. var requestHandlers = require("./requestHandlers");
  4.  
  5. var handle = {}
  6. handle["/"] = requestHandlers.start;
  7. handle["/start"] = requestHandlers.start;
  8. handle["/upload"] = requestHandlers.upload;
  9.  
  10. service.start(route.route, handle);

路由处理,route.js:

  1. function route(handle,pathname){
  2. console.log("About to route a request for "+pathname);
  3. if(typeof handle[pathname] === 'function'){
  4. handle[pathname]();
  5. }else{
  6. console.log("No request handler found for "+pathname);
  7. }
  8. }
  9.  
  10. exports.route = route;

service.js:

  1. var http = require("http"); //Node.js自带的模块,并且把它赋值给变量
  2. var url = require("url");
  3.  
  4. function start(route, handle){ //依赖注入,将路由和处理都注入
  5. function onRequest(request,response){
  6. /*
  7. * 对于一个URL: http://localhost:8088/start?foo=bar&hello=world
  8. * 以下的pathname得到的是"start"
  9. * */
  10. var pathname = url.parse(request.url).pathname;
  11. console.log("Request for "+pathname+"received");
  12.  
  13. route(handle,pathname);//将参数传递给路由
  14.  
  15. console.log('Request received.')
  16. response.writeHead(200,{"Content-Type":"text/plain"});
  17. response.write("hello world");
  18. response.end();
  19. }
  20.  
  21. http.createServer(onRequest).listen(8088);
  22. console.log("Server has started.");
  23. }
  24.  
  25. exports.start = start;

入口模块:index.js

  1. var service = require("./service");//使service模块可以被注入到服务器中
  2. var route = require("./route");//使route模块可以被注入到服务器中
  3. var requestHandlers = require("./requestHandlers");
  4.  
  5. var handle = {}
  6. handle["/"] = requestHandlers.start;
  7. handle["/start"] = requestHandlers.start;
  8. handle["/upload"] = requestHandlers.upload;
  9.  
  10. service.start(route.route, handle);

[nodejs] day1-创建服务器的更多相关文章

  1. nodeJs中创建服务器

    var http=require('http'); var httpObj=http.createServer(function(req,res) { console.log('someBody:' ...

  2. 用nodejs创建服务器显示html页面

    nodejs版本:v10.14.2 1.首先准备一个简单的html页面 <!DOCTYPE html> <html lang="en"> <head& ...

  3. Nodejs学习笔记(3) 创建服务器:Web 模块(http)与 express 框架

    目录 参考资料 1. 使用 http 模块创建服务器 1.1 实现思路及代码 1.2 HTTP 结构 1.2.1 Request中的重要字段 1.2.2 Response 头信息:文件类型.状态码.连 ...

  4. nodejs+express创建一个简单的服务器

    //首先安装express //1.引入express const express = require('express'); //2.创建服务器对象 let server = express(); ...

  5. 【nodejs】创建第一个应用

    我已经安装好了nodejs(采用安装包的方式),并在idea中安装好nodejs插件,具体参考我的随笔: http://www.cnblogs.com/yujihang/p/7011356.html ...

  6. 在nodejs中创建child process

    目录 简介 child process 异步创建进程 同步创建进程 在nodejs中创建child process 简介 nodejs的main event loop是单线程的,nodejs本身也维护 ...

  7. 在nodejs中创建cluster

    目录 简介 cluster集群 cluster详解 cluster中的event cluster中的方法 cluster中的属性 cluster中的worker 总结 在nodejs中创建cluste ...

  8. NodeJS搭建HTTPS服务器

    [NodeJS搭建HTTPS服务器] http://cnodejs.org/topic/54745ac22804a0997d38b32d

  9. nodejs,node原生服务器搭建实例

    nodejs,node原生服务器搭建实例

  10. java20 创建服务器:ServerSocket

    创建服务器:ServerSocket import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

随机推荐

  1. Cocos2dx 3.1.1 学习笔记整理(4):事件监听与Action的初步使用

    项目忙,趁着刚才有点空,看了下触摸事件在新版本中怎么实现,遇到问题都是去:cocos2d-x-3.1.1\tests\cpp-tests\Classes下面找的,里面都是一些小例子. 首先新的CCNo ...

  2. redis sentinel 集群监控 配置

    环境: ip  172.16.1.31 26379  redis sentinel ip  172.16.1.30 6379   主 1 ip  172.16.1.31 6380   从 1 ip   ...

  3. (简单) LightOJ 1074 Extended Traffic,SPFA+负环。

    Description Dhaka city is getting crowded and noisy day by day. Certain roads always remain blocked ...

  4. cron 执行php文件

    php执行的命令要写全路径,不然无法执行

  5. linux下配置ip地址四种方法(图文)

    (1)Ifconfig命令   第一种使用ifconfig命令配置网卡的ip地址.此命令通常用来零时的测试用,计算机启动后 ip地址的配置将自动失效.具体用法如下.Ipconfig  ethx   i ...

  6. NSDateFormatter调整时间格式的代码

    NSDateFormatter调整时间格式的代码 在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理.例如://实例化一个NSDat ...

  7. BZOJ 1497 [NOI2006]最大获利 ——网络流

    [题目分析] 最大权闭合子图. S到集合1容量为获利的大小,集合2到T为所需要付出的相反数. 然后求出最大流,然后用总的获利相减即可. [代码] #include <cstdio> #in ...

  8. UVa 324 - Factorial Frequencies

    题目大意:给一个数n,统计n的阶乘中各个数字出现的次数.用java的大数做. import java.io.*; import java.util.*; import java.math.*; cla ...

  9. java实现——009Fibonacci数列

    1.循环 public class T009 { public static void main(String[] args){ System.out.println(fibonacci(3)); } ...

  10. Collections笔记

    Colletion是集合接口 Collections是集合工具类,是一个类哈! public class CollectionsTest { public static void main(Strin ...