[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 ...
随机推荐
- Cocos2dx 3.1.1 学习笔记整理(4):事件监听与Action的初步使用
项目忙,趁着刚才有点空,看了下触摸事件在新版本中怎么实现,遇到问题都是去:cocos2d-x-3.1.1\tests\cpp-tests\Classes下面找的,里面都是一些小例子. 首先新的CCNo ...
- 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 ...
- (简单) LightOJ 1074 Extended Traffic,SPFA+负环。
Description Dhaka city is getting crowded and noisy day by day. Certain roads always remain blocked ...
- cron 执行php文件
php执行的命令要写全路径,不然无法执行
- linux下配置ip地址四种方法(图文)
(1)Ifconfig命令 第一种使用ifconfig命令配置网卡的ip地址.此命令通常用来零时的测试用,计算机启动后 ip地址的配置将自动失效.具体用法如下.Ipconfig ethx i ...
- NSDateFormatter调整时间格式的代码
NSDateFormatter调整时间格式的代码 在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理.例如://实例化一个NSDat ...
- BZOJ 1497 [NOI2006]最大获利 ——网络流
[题目分析] 最大权闭合子图. S到集合1容量为获利的大小,集合2到T为所需要付出的相反数. 然后求出最大流,然后用总的获利相减即可. [代码] #include <cstdio> #in ...
- UVa 324 - Factorial Frequencies
题目大意:给一个数n,统计n的阶乘中各个数字出现的次数.用java的大数做. import java.io.*; import java.util.*; import java.math.*; cla ...
- java实现——009Fibonacci数列
1.循环 public class T009 { public static void main(String[] args){ System.out.println(fibonacci(3)); } ...
- Collections笔记
Colletion是集合接口 Collections是集合工具类,是一个类哈! public class CollectionsTest { public static void main(Strin ...