文档章节

node 笔记

forwy
 forwy
发布于 2017/03/29 18:52
字数 1197
阅读 23
收藏 0

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());
});

-------------------------------------------------未完  续?

© 著作权归作者所有

上一篇: Redis Cluster 搭建
下一篇: first mean
forwy
粉丝 2
博文 52
码字总数 16797
作品 0
赣州
私信 提问
7月22日至7月26日 学习总结

1. 笔记 Cocos2d-x 学习笔记(6) Sprite SpriteFrameCache Texture2D TextureCache Cocos2d-x 学习笔记(7) 内存管理 Sprite SpriteFrame Texture2D Cocos2d-x 学习笔记(8) ActionManager Coc......

深潮
07/27
0
0
程序员笔记 CherryTree 0.37.0 发布

一个支持无限层级分类的笔记软件,Python编写,支持富文本编辑和代码高亮,支持Linux和Windows平台。 数据采用sqlite或XML存储,支持密码保护,支持从NoteCase、KeepNote、Knowit、Tomboy、T...

cpnandajie
2016/05/30
10.5K
24
撸一个微信小程序记事本备忘录-随微记

废话不多说了,目的直接点 微信上记录一些资料(比如公司信息以及开发票等),方便查看 可以随时分享出来,可以生成图片海报 做一些工具(后续开放) 最后总结就是弄它,随微记是自己想的,页面...

龙荩草
08/09
0
0
增加软链接

增加软链接:node和npm到/usr/bin 复制代码代码如下: ~ sudo ln -s /usr/local/bin/node /usr/bin/node ~ sudo ln -s /usr/local/bin/npm /usr/bin/npm Docker学习笔记 — 配置国内免费regis......

互联网fans
2016/07/22
0
0
程序员笔记 CherryTree 0.35.8 发布

一个支持无限层级分类的笔记软件,Python编写,支持富文本编辑和代码高亮,支持Linux和Windows平台。 数据采用sqlite或XML存储,支持密码保护,支持从NoteCase、KeepNote、Knowit、Tomboy、T...

首席吊炸天
2015/06/15
3.7K
18

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部