学习视频
Node.js学习(一)介绍
Node.js学习(二)异步、缓存区、文件系统
Node.js学习(三)常用模块与网络爬虫
服务器入门
/**
* node.js服务器:
* 1.引入通信模块
* 2.创建服务器
* 3.监听request事件
* 4.监听端口
*
* 访问服务器:
* 1)打开浏览器
* 2)输入网址
* 127.0.0.1 本地地址
* localhost 当前主机,本地域名
* 局域网IP
*
*/
var http=require('http');
//创建服务器
var server=http.createServer();
//监听request请求事件,当前请求事件发生时就返回数据
server.on('request',function(req,res){
//req:请求对象,包含了所有客户端请求的数据,请求头、请求主体
//res:响应对象,包含了所有服务器端发给客户端的数据,响应头、响应主体
res.write('<h1>Hello Node.js</h1>');
res.write('<p>hello</p>');
res.end();
})
//监听服务器的1111端口
server.listen(1111,function(){
console.log('服务器已运行。。。')
})
http响应内容
需求:根据用户的请求地址(url),响应不同的网页
/**
* 网页响应内容:
* 可以根据用户请求的url不同,判断响应不同的数据,实现访问不同的url得到不同的结果。
* 核心:res.url 获取到用户请求的网址
*/
var http=require('http');
//创建服务器
var server=http.createServer();
//监听request请求事件,当前请求事件发生时就返回数据
server.on('request',function(req,res){
//req:请求对象,包含了所有客户端请求的数据,请求头、请求主体
//res:响应对象,包含了所有服务器端发给客户端的数据,响应头、响应主体
if(req.url==='/'){
res.write('<h1>homes</h1>');
}
if(req.url==='/news.html'){
res.write('<h1>news</h1>');
}
if(req.url==='/about.html'){
res.write('<h1>about</h1>');
}
res.end();
})
//监听服务器的1111端口
server.listen(1111,function(){
console.log('服务器已运行。。。')
})
http状态码
http现已规定的服务器响应数据时的状态编码,就是状态码
- 常用状态码
- 1xx:表示普通消息,没有特殊含义
- 2xx:表示服务器响应成功
200:成功 - 3xx:表示重定向
301:永久重定向
302:临时重定向
304:使用缓存(服务器没有更新过) - 4xx:无法访问
403:权限不足,无法访问
404:资源找不到 - 5xx:服务器有错
500:服务器端代码有错
502:网关错误
503:服务器已崩溃
状态码使用
res.writeHead(状态码,响应头对象)
例:res.writeHead(200,{"Content-Type":"text-html; charset=utf-8"})响应头
- Content-Type:响应的文件类型
注意:未指定响应文件的类型时,默认是html,编码默认是系统编码 - Content-Length:响应内容的长度
- Access-Control-Allow-Origin:设置响应头可以跨域
MIME类型
- 什么是MIME类型
MIME类型可以认为是文件类型的表述 - 常用的MIME类型
.txt text/plain
.html text/html
.css text/css
.js text/javascript
.png image/png
.jpg image/jpeg
.gif image/gif
.json text/json application/json
.mp3 audio/mpeg
.mp4 video/mpeg
.pdf application/pdf
.xml text/xml
.zip application/x-gzip
var http=require('http');
//创建服务器
var server=http.createServer();
//监听request请求事件,当前请求事件发生时就返回数据
server.on('request',function(req,res){
res.writeHead(200,{
//"Content-Type":"text-html; charset=utf-8" //生成一个html网页
//"Content-Type":"text-plain; charset=utf-8" //生成一个普通文本
"Content-Type":"application/x-gzip" //生成一个压缩包,浏览器自动下载
})
res.write('<h1>homes</h1>');
res.end();
})
//监听服务器的1111端口
server.listen(1111,function(){
console.log('服务器已运行。。。')
})
制作一个静态网页服务器
var http=require('http');
var fs=require('fs');
var path=require('path');
//创建服务器
var server=http.createServer();
//监听request请求事件,当前请求事件发生时就返回数据
server.on('request',function(req,res){
if(req.url==='/'){
req.url='/index.html';//制作一个默认首页
}
var fn='./www'+req.url;
var ext=path.extname(fn);
var exts={".html":"text/html",".css":"text/css",".jpg":"image/jpeg"};
fs.readFile(fn,function(err,data){
if(err){
res.writeHead(400,{"Content-Type":"text/html; charset=utf-8"});
res.write('资源找不到');
res.end();
}else{
res.writeHead(200,{"Content-Type":exts[ext]+"; charset=utf-8"});
res.write(data+'');
res.end();
}
})
})
// 监听服务器的1111端口
server.listen(1111,function(){
console.log('服务器已运行。。。')
})
接收数据
客户端向服务器传递数据:
- GET方式
在URL后面添加? 写键值对形式就是GET方式传数据
只要可以写url的地方就可以在后面加?传参数
在node.js可以接收到客户端传过来的参数值 - POST方式
只有form表单可以实现POST方式提交,POST方式提交的数据在请求主体
var http=require('http');
var server=http.createServer();
server.on('request',function(req,res){
//GET请求
//通过req.url后面参数字符串的解析,分析出传的参数和值
var query=req.url.split('?');
var value=query[1].split('=');
res.writeHead(200,{"Content-Type":"text/html; charset=utf-8"});
res.write('<h1>传的参数值为:'+value+'</h1>');
res.end();
//POST请求
//定义一个动态页面
if(req.utl=='action.html'){
//从req请求主体中获取到POST方式提交的数据
var query='';
req.on('data',function(){
query+=arguments.toString();
});
req.on('end',function(){
res.writeHead(200,{"Content-Type":"text/html; charset=utf-8"});
res.write('<h1>我们已经收到了请求</h1>')
res.write('<h1>接收到的数据是'+query+'</h1>')
res.end();
})
}
})
server.listen(1111,function(){
console.log('服务器已运行...');
})
动态网页模板
- 什么是模板?
将一些固定的结构或表现直接以静态文件形式存储,将需要表现成动态数据的地方使用模板语法进行编写,再使用模板引擎读取该静态文件,将动态的数据进行替换进去,最终实现产生出一个动态的页面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
<link type="text/css" rel="stylesheet" href="css/style.css">
</head>
<body>
<h1>访问IP为:<%=ip%></h1>
</body>
</html>
var http=require('http');
var fs=require('fs');
var server=http.createServer();
function render(data,ip){
return data.replace('<%=ip%>',ip);
}
server.on('request',function(req,res){
var ip=req.socket.remoteAddress;//获取用户的IP地址
fs.readFile('./www/temple.html',function(err,data){
res.writeHead(200,{"Content-Type":"text/html; charset=utf-8"});
res.write(render(data.toString(),ip));
res.end();
})
})
server.listen(1111,function(){
console.log('服务器已运行。。。')
})
版权声明:本文为hmyhicc原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。