Node.js-创建Web服务器和TCP服务器

使用http模块创建Web服务器

   Web服务器的功能:

  • 接受HTTP请求(GET、POST、DELETE、PUT、PATCH)
  • 处理HTTP请求(自己处理,或请求别的程序处理)
  • 做出响应(返回页面、文件、各类数据等)
常见的Web服务器架构:
  1. Nginx、Apache:负责接受HTTP请求,确定谁来处理请求,并返回请求的结果
  2. php-fpm / php模块:处理分配给自己的请求,并将处理结果返回给分配者  
常见请求种类:
  1. 请求文件:包括静态文件(网页、图片、前端JavaScript文件、css文件...),及由程序处理得到的文件
  2. 完成特定的操作:如登录、获取特定数据等          
Node.js的Web服务器:
  1. 不依赖其他特定的Web服务器软件(如Apache、Nginx、IIS......)
  2. Node.js代码处理请求的逻辑
  3. Node.js代码负责Web服务器的各种“配置”         
使用Express创建Web服务器
  • 简单的Express服务器
  • 静态文件服务
  • 路由
  • 中间件
        简单的Express服务器:
	var express = require('express');

        var app = express();

        app.get('', function(req, res){
		res.end('hello\n');
	});

	app.listen(18001, function afterListen(){
	 	console.log('express running on http://localhost:18001');
	});	
静态文件范围:
          网页、纯文本、图片、前端JavaScript代码、CSS样式表文件、媒体文件、字体文件
使用Express访问静态文件     
app.use(express.static('./public'));
路由:
  1. 将不同的请求,分配给相应的处理函数
  2. 区分:路径、请求方法
三种路由实现方法:
  • path:比较简单
  • Router:比较适合同一个路由下的多个子路由
  • route:比较适合API
var express = require('express');
var morgan = require('morgan');

var app = express();

app.use(express.static('./public'));
app.use(morgan());

app.get('', function(req, res){
	res.end('hello\n');
});

// Ronter路由
var Router = express.Router();

// http://example.com/post/add
// http://example.com/post/list
Router.get('/add', function(req, res){
	res.end('Router /add\n');
});
Router.get('/list', function(req, res){
	res.end('Router /list\n');
});

app.use('/post', Router);

// route路由
app.route('/article')
	.get(function(req, res){
		res.end('route /article get\n');
	})
	.post(function(req, res){
		res.end('route /article post\n')
	});

//http://example.com/news/123

app.param('newsId', function(req, res, next, newsId){
	req.newsId = newsId;
	next();
});

app.get('/news/:newsId', function(req, res){
	res.end('newsId: ' + req.newsId+ '\n');
});
	

app.listen(18001, function afterListen(){
	console.log('express running on http://localhost:18001');
});
中间件
  • Connect:Node.js的中间件框架
  • 分层处理
  • 每层实现一个功能
创建TCP服务器
  • 使用net模块创建TCP服务器
  • 使用telnet连接TCP服务器
  • 使用net创建TCP客户端
tcp.js:
var net = require('net');

const PORT = 18001;
const HOST = '127.0.0.1'

var clientHandler = function(socket){
	console.log('someone connected');

	socket.on('data', function dataHandler(data){
		console.log(socket.remoteAddress, socket.remotePort, 'send', data.toString());
		socket.write('server received\n');
	});

	socket.on('close', function(){
		console.log(socket.remoteAddress, socket.remotePort, 'disconnected');
	})
};

var app = net.createServer(clientHandler);

app.listen(PORT, HOST);
console.log('TCP server running on tcp://', HOST, ':', PORT);
tcpClient.js:
var net = require('net');

const HOST = '127.0.0.1';
const PORT = 18001;

var tcpClient = net.Socket();

tcpClient.connect(PORT, HOST, function(){
	console.log('connect success');
	tcpClient.write('this is tcp client by Node.js');
});

tcpClient.on('data', function(data){
	console.log('received: ', data.toString());
})
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值