node 服务器特点:
- 不依赖其它特定的Web服务器软件(如Tomcat、Apache、Nginx、IIS……)
- Node.js代码处理请求的逻辑
- Node.js代码负责Web服务器的各种“配置”
1、使用 http 模块创建 web 服务器
var http = require('http');//引用node的核心模块 http ,核心模块也需引用
/**
*此方法需要定义在 创建服务器之前
*/
var requestHandler = function (req,res){
res.end('hello');//response.end方法表明响应内容已完结,response有很多方法
}
var myServer = http.createServer(requestHandler);//参数为一个request方法,当请求发生时,将传递给requestHandler方法2个参数request和response
myServer.listen(12345);
console.log('web server startup on port 12345');
#startup
node createHttpServer.js
[root@VM_18_255_centos server]# node createHttpServer.js
web server startup on port 12345
[root@VM_18_255_centos /]# curl 127.0.0.1:12345
hello
2、使用 Express 创建 web 服务器
首先加载安装 express 模块,参照 我的博客
var express = require('express');
var app = express();//创建一个express实例
//在express中使用路由来实现对相迎进行控制
app.get('/',function(req,res){
res.end('hello\n');
});
app.listen(12346,function afterListen(){
console.log('listen on 12346');
});
[root@VM_18_255_centos express]# node expressServer.js
listen on 12346
[root@VM_18_255_centos /]# curl 127.0.0.1:12346
hello
使用express generator生成应用模板
npm install -g express-generator
express expressHello cd expressHello npm install
默认执行脚本是 bin/www 文件,默认端口号是3000
node bin/www
[root@VM_18_255_centos ~]# curl 127.0.0.1:3000 <!DOCTYPE html><html><head><title>Express</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>Express</h1><p>Welcome to Express</p></body></html>
express 静态文件服务
使用 express 静态服务的中间件
var express = require('express'); var app = express();//创建一个express实例 app.use(express.static('./public'));//使用express静态服务中间件,指定目录为 public //在express中使用路由来实现对相迎进行控制 app.get('/',function(req,res){ res.end('hello\n'); }); app.listen(12346,function afterListen(){ console.log('listen on 12346'); });
#test在public目录下,路径直接填写public下的相对路径 curl 127.0.0.1:12347/test.txt
[root@VM_18_255_centos /]# curl 127.0.0.1:12347/test.txt this is a file for test express static server!
路由:
•将不同的请求,分配给相应的处理函数
•区分:路径、请求方法
三种路由方法:
•path
app.get('/',function(req,res){ res.end('hello\n'); });
•Router
var Router = express.Router(); /** *http://mydomain.com/post/add *http://mydomain.com/post/list */ Router.get('/add',function(req,res){ res.end('add\n'); }); Router.get('/list',function(req,res){ res.end('list\n'); }); app.use('/post',Router);//加到路由上
var express = require('express'); var app = express();//创建一个express实例 app.use(express.static('./public')); //在express中使用路由来实现对相迎进行控制 app.get('/',function(req,res){ res.end('hello\n'); }); var Router = express.Router(); /** *http://mydomain.com/post/add *http://mydomain.com/post/list */ Router.get('/add',function(req,res){ res.end('add\n'); }); Router.get('/list',function(req,res){ res.end('list\n'); }); app.use('/post',Router);//加到路由上 app.listen(12348,function afterListen(){ console.log('listen on 12346'); });
[root@VM_18_255_centos /]# curl -X POST 127.0.0.1:12348/article post [root@VM_18_255_centos /]# curl -X GET 127.0.0.1:12348/article get
•route
/*route*/ app.route('/article') .get(function(req,res){ res.end('get\n'); }) .post(function(req,res){ res.end('post\n'); });
var express = require('express'); var app = express();//创建一个express实例 app.use(express.static('./public')); //在express中使用路由来实现对相迎进行控制 app.get('/',function(req,res){ res.end('hello\n'); }); var Router = express.Router(); /** *http://mydomain.com/post/add *http://mydomain.com/post/list */ Router.get('/add',function(req,res){ res.end('add\n'); }); Router.get('/list',function(req,res){ res.end('list\n'); }); app.use('/post',Router);//加到路由上 /*route*/ app.route('/article') .get(function(req,res){ res.end('get\n'); }) .post(function(req,res){ res.end('post\n'); }); app.listen(12348,function afterListen(){ console.log('listen on 12349'); });
[root@VM_18_255_centos /]# curl -X POST 127.0.0.1:12348/article post [root@VM_18_255_centos /]# curl -X GET 127.0.0.1:12348/article get
路由参数
//路由参数 app.param('newsId',function(req, res, next, newsId){ req.newsId = newsId;//执行读取news操作 next(); }); app.get('/news/:newsId',function(req,res){ res.end('newsId: '+req.newsId+'\n'); });
var express = require('express'); var app = express();//创建一个express实例 app.use(express.static('./public')); //在express中使用路由来实现对相迎进行控制 app.get('/',function(req,res){ res.end('hello\n'); }); var Router = express.Router(); /** *http://mydomain.com/post/add *http://mydomain.com/post/list */ Router.get('/add',function(req,res){ res.end('add\n'); }); Router.get('/list',function(req,res){ res.end('list\n'); }); app.use('/post',Router);//加到路由上 /*route*/ app.route('/article') .get(function(req,res){ res.end('get\n'); }) .post(function(req,res){ res.end('post\n'); }); //路由参数 app.param('newsId',function(req, res, next, newsId){ req.newsId = newsId;//执行读取news操作 next(); }); app.get('/news/:newsId',function(req,res){ res.end('newsId: '+req.newsId+'\n'); }); app.listen(12349,function afterListen(){ console.log('listen on 12349'); });
[root@VM_18_255_centos /]# curl 127.0.0.1:12349/news/123 newsId: 123
3、创建 TCP 服务器
创建服务端
var net = require('net');
const HOST = '127.0.0.1';
const PORT = 12315;
var clientHandler = function(socket){
console.log('one client is connected!');
socket.on('data',function(data){
console.log(socket.remoteAddress,socket.remotePort,'send',data.toString());//buffer,使用toString转换
socket.write('server send to client\n');
});
socket.on('close',function(){//当连接断开出发,此时socket已经销毁,所以socket.remoteAddress,socket.remotePort为空
console.log(socket.remoteAddress,socket.remotePort,'disconnected');
});
};
var app = net.createServer(clientHandler);
app.listen(PORT,HOST);//注意顺序
console.log('server listen on ',PORT);
[root@VM_18_255_centos tcpServer]# node tcpServer.js
server listen on 12315
one client is connected!
127.0.0.1 52274 send hello server
[root@VM_18_255_centos ~]# telnet 127.0.0.1 12315
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hello server
server send to client
[root@VM_18_255_centos ~]# netstat -antp | grep 12315
tcp 0 0 127.0.0.1:12315 0.0.0.0:* LISTEN 9599/node
tcp 0 0 127.0.0.1:12315 127.0.0.1:52274 ESTABLISHED 9599/node
tcp 0 0 127.0.0.1:52274 127.0.0.1:12315 ESTABLISHED 9696/telnet
创建客服端
var net = require('net');
const HOST = '127.0.0.1';
const PORT = 12315;
var tcpClient = net.Socket();
tcpClient.connect(PORT, HOST, function(){
console.log('connect success');
});
tcpClient.on('data',function(data){
console.log(data.toString());
});
-------------------------------------------------未完 续?