1、用nodejs写一个服务器程序
var http=require("http");
创建server: var server=http.createServer()
监听request请求事件,设置请求处理函数
server.on("request",function(req,res){
console.log("请求收到了,请求的路径是:"+req.url);
res.write("hello");//发送相应数据,响应可以发送多次(响应内容)
res.end();//发送数据结束之后要end,否则浏览器会一直等待
//res.end("hello");发送数据同时end,上面两行代码的简写版本
})
绑定端口号,启动服务
server.listen(3000,function(){
console.log("服务器启动成功了,可以访问了");
})
注意:favicon.ico是浏览器的默认请求,它是一个图标,网页标题栏左侧的图标。
响应内容只能是二进制数据或者字符串,数字,对象,数组,布尔值都不可以。
JSON的两个方法,parse(从字符中解析出json对象),stringify(从对象中解析出字符串)。
2、node为js提供了很多服务器级别的api,这些api绝大多数都被包装到了一个具名的核心模块中了。例如文件操作的‘fs’核心模块,http服务构建的http模块,path路径操作模块,os操作系统信息模块。要使用核心模块,必须要引入。
require是一个方法,它的作用是用来加载模块的,在node中,模块有三种,(1)具名的核心模块,例如:fs、http(2)用户自己编写的文件模块。
*相对路径必须加./
例如两个文件中,require('./b.js'); js后缀名可以省略,./不能省略,省略之后把它当成了核心模块
a.js console.log('a start'); require('./b.js'); consoloe.log('a end');
b.js console.log('b start');
node a.js 之后,输出结果是:a start b start a end
*在node中没有全局作用域,只有模块作用域。外部访问不到内部,内部也访问不到外部。
a.js var foo='aaa'; console.log('a start'); require('./b.js'); consoloe.log('a end');
console.log(foo);
b.js console.log('b start'); var foo='bbb';
node a.js 之后,输出结果是:a start b start aaa a end
*如何让模块与模块之间进行通信,默认是封闭的。
require方法有两个作用:1、加载模块并执行里面的代码 2、拿到被加载文件模块导出的接口对象
在每个文件模块中都提供了一个对象,exports,exports默认是一个空对象。,要做的就是把所有需要被外部访问的成员挂在到这个exports对象中。
可以用node开启多个服务,但一定要确保不同服务占用的端口号不一致。(同一个端口号同一时间只能被一个程序占用。)
*在服务器端默认发送的数据是utf编码的内容,但是浏览器不知道是utf8编码的内容,浏览器在不知道服务器响应内容编码的情况下会按照当前操作系统的默认编码去解析,中文操作系统默认是gbk。解决方法是正确告诉浏览器发送内容是什么编码方式。
res.responsHeader('Content-Type','text-plain';charset=utf-8);
3、(1)结合fs发送文件中的数据(2)Content-Type http://tool.oschina.net/commons
不同的资源对应的Content-type是不一样的,图片不需要指定编码,一般只为字符数据指定编码
var http=require('http');
var fs=require('fs');
var server=http.createServer()
server.on('request',function(req,res){
var url=req.url;
if(url==='/'){
fs.readFile('./index.html',function(err,data){
if(err){
res.setHeader('Content-Type','text/plain;charset=utf-8');
res.end('文件读取失败,请稍后重试')
}else{
res.setHeader('Content-Type','text/html;charset=utf-8')
res.end(data);
}
});
}else if(url==='/xiaoming'){
fs.readFile('ab2.jpg',function(err,data){
if(err){
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('文件读取失败,请稍后重试')
}else{
res.setHeader('Content-Type','image/jpeg');
res.end(data)
}
})
}
})
server.listen(3000,function(){
console.log('Server is running...');
})