var server = http.createServer([request.listener]);
参数:request.listener : 监听到客户端连接的回调函数。
监听客户端连续请求,只有当调用了listen方法后,服务器才开始正常工作。
参数:
port: 监听的端口。
hostname : 主机名(IP域名)。
backblg : 连接等待队列的最大长度。
callback : 调用listen方法并成功开启监听器以后,会触发一个listening事件,callback作为该事件的执行函数。
listening事件 : 当server调用listen方法并成功开始监听以后触发的事件。
error事件 : 当服务器开启失败的时候被触发的事件,参数err表示具体的错误对象。
request事件 : 当有客户端发送请求到该主机和端口的请求的时候触发。
更多的server类下的事件有(仍不完整):
httpVersion:使用的http协议版本。
headers:请求头信息的数据。
url:请求的地址。
method:请求的方法。
write(chunk, [encoding]):发送一个数据块到响应正文中。
end(chunk, [encoding]):=档所有的头信息和正文发送完成以后,调用该方法告诉服务器数据已经全部发送完成了,这个方法在每次信息发送完成以后必须调用,并且是最后调用。
statusCode:该属性用来设置返回的状态码。
setHeader(name, value):设置返回的头信息。
writeHead(statusCode, [resonPhrase], [headers]),这个方法只能在当前请求中使用一次,并且必须在response.end()之前调用。
var http = require('http'); //加载一个http模块
//通过http模块下的createServer,创建并返回一个http对象
var server = http.createServer();
server.on('error', function (err) {
console.log(err);
});
server.on('listening', function () {
console.log('lisrening....');
});
server.on('request', function (req, res) {
console.log('有客户端请求了');
// console.log(req); // 打印出返回的信息
//设置头信息
res.setHeader('Cynthia', 'xie');
res.writeHead(200, 'hello',{
'content-type' : 'text/plain',
'content-type' :'text/html;charset=utf-8'
});
res.write('hello world!
');
res.end(); //要在write之后
});
server.listen(8080, 'localhost');
在浏览器输入 localhost:8080
控制台就会显示:
listening....
有客户端请求了
parse(request.url) ,对url格式的字符串进行解析,返回一个对象。
根据不同的url进行处理,返回不同的数据。
使用示例:
var http = require('http');
var url = require('url');
var server = http.createServer();
// var urlStr1 = url.parse('http://net.chinabyte.com/hot/405/14104905_2.shtml');
// console.log(urlStr1); //会显示传入网址的每个字段的含义
// req.url //访问路径 ?后面的部分 query string
server.on('request',function (req, res) {
// console.log(req.url);
var urlStr = url.parse(req.url);
// console.log(urlStr);
switch (urlStr.pathname){
case '/': //首页
res.writeHead(200, {
'content-type': 'text/html;charset=utf-8'
});
res.end('这是首页
');
break;
case '/user': //用户首页
res.writeHead(200, {
'content-type': 'text/html;charset=utf-8'
});
res.end('这是个人中心
');
break;
default: //处理其他情况
res.writeHead(404, {
'content-type': 'text/html;charset=utf-8'
});
res.end('404
');
break;
}
});
server.listen(8080, 'localhost');
运行代码后在浏览器:
输入: localhost:8080 页面会显示:这是首页
输入: localhost:8080/user 页面会显示: 这是个人中心
输入: localhost:8080/[任意字符] 页面就是显示 : 404
var http = require('http');
var url = require('url');
var fs = require('fs');
var querystring = require('querystring');
var server = http.createServer();
var htmlDir = __dirname + '/html/';
server.on('request',function (req, res) {
var urlStr = url.parse(req.url);
switch (urlStr.pathname){
case '/': //首页
sendData(htmlDir + 'index.html', req, res);
break;
case '/user': //用户首页
sendData(htmlDir + 'user.html', req, res);
break;
case '/login': //用户登录页面
sendData(htmlDir + 'login.html', req, res);
break;
case '/login/check':
// console.log(req.method); get/post
// console.log(querystring.parse(urlStr.query)); //{ username: 'hello', password: '123' } get方式提交的数据
if (req.method.toUpperCase() == 'POST'){
var str = '';
req.on('data', function (chunk) {
str += chunk;
});
req.on('end', function () { //等待从缓冲区读取出所有的数据
console.log(str); //username=Cynthia&password=123
console.log(querystring.parse(str)); //{ username: 'Cynthia', password: '123' } 变成一个对象
});
}
break;
default: //处理其他情况
sendData(htmlDir + 'err.html', req, res);
break;
}
});
function sendData(file, req, res) {
fs.readFile(file, function(err, data){
if(err){
res.writeHead(404, {
'content-type': 'text/html;charset=utf-8'
});
res.end('404
');
}else{
res.writeHead(200, {
'content-type': 'text/html;charset=utf-8'
});
res.end(data);
}
});
}
server.listen(8080,'localhost');
在执行这段代码前,首先请在当前目录下新建一个命名为html的文件夹,里面存放需要用到的html文件。
然后在浏览器地址栏输入:
localhost:8080 就会加载index.html文件
localhost:8080/user 就会加载user.html文件
localhost:8080/login 就会加载login.html文件
localhost:8080/[任意字符] 页面就是显示 : 404
代码中用的querystring模块,详细可以参考node文档:
http://nodejs.cn/api/querystring.htmlps:文中可能出现还有不少不理解的地方,由于本人也是刚入门级的学习node.js, 当然就还有不少理解不到位的地方,欢迎您的提问和留言。