一、使用node构建Web服务器
加载核心模块 ---> 创建服务器 ---> 提供对数据的服务 ---> 绑定端口号启动服务器
1、加载核心模块(其实就是引包)
var http =
require(‘http’);
如果要操作文件的话还要用:
var fs = require(‘fs’);
2、创建服务器
var server = http.
createServer();
3、提供对数据的服务
server.on('
request',function(
req,res){ //
request是服务器的请求事件,req是请求对象,res是响应对象
// /index.html
var url = req.url; //将请求对象的地址赋给url
if(url === '/'){ //如果请求对象的地址就是端口号绑定的地址
// 要发送的还是在文件中的内容
fs.readFile('./resource/index.html',function(err,
data){ //读入文件
if(err){ //读取文件失败
res.setHeader('Content-type','text/plain;charset=utf-8');
res.end('文件读取失败,请稍后重试');
}else{ //读取文件成功
//
data在文件中默认是二进制数据,可以通过.toString转为能识别的字符串
res.setHeader('Content-type','text/html;charset=utf-8'); //解决网页显示中文乱码问题
res.end(data);
}
});
}else if(url === '/a'){ //请求对象的地址是/a
fs.readFile('./resource/head.png',function(err,data){ //读取文件
if(err){ //读取失败
res.setHeader('Content-Type','text/plain;charset=utf-8');
res.end('文件读取失败,请稍后重试');
}else{ //读取成功
//图片不需要指定编码
res.setHeader('Content-Type',' application/x-png');
res.end(data);
}
});
}
});
4、绑定端口号启动服务器
server.
listen(3000,function(){
console.log('服务器启动成功,可以通过http://127.0.0.1:3000/来访问');
});
二、模块系统
1、在node中
每一个文件称为一个模块
2、每一个模块都有一个自己的module对象,这个对象又有一个成员对象exports。每个模块最后返回的都是自己的
module.exports对象,是一个对外导出的接口。
例如:a.js模块里面require(加载)了b.js模块,那么a.js模块就能得到b.js模块的module.exports对象。这样a.js文件就可以获取到b.js文件里面的module.exports.xxx(可以是对象、方法),也就是b.js可以通过自己的module.exports对外导出自己的对象/方法
a.js模块:
b.js模块:
运行结果:运行a.js文件之后,可以在控制台中打印出‘hello bbbbbb’
三、express的使用
1、在文件中通过node
安装express的步骤
(1)在要安装express的文件下打开cmd
(2)初始化:npm init -y
(生成package.json文件,注意,文件夹里一定要有这个package.json文件才能成功安装express)
(3)输入命令行:npm install --save express
注意事项:
在用npm安装express的时候,经常会出现这种情况:在cmd窗口npm install express回车之后,出现三个ERROR提示安装没有成功,并且在文件目录下也不能找到express,如果出现这种情况,就要检查三个地方
(1)在安装espress包的目录下是否有package.json文件,如果没有,在cmd中输入“npm init -y”回车
(2)要以管理员身份运行cmd
(3)要删除
C:\Users\{账户}\下的.npmrc文件
完成上述步骤之后再在cmd输入"npm i -S express"就会安装成功了
2、在入口文件app.js使用express
加载核心模块(引包)---> 创建express服务器 ---> 公开指定目录资源 ---> 响应操作 ---> 绑定端口号开启服务器
(1)加载核心模块(引包)
var express =
require(‘express’);
(2)创建express服务器
var app =
express();
(3)公开指定目录资源(
只要这样就可以直接通过/public/xxx的方式访问到public目录中个所有资源,原本要访问特定文件的时候要自己手动写代码来判断路径,读取文件,现在通过express就不用了)
app.use('/public/',express.static('./public/'));
(4)响应操作
当服务器收到 get请求“/” 的时候,执行该回调处理函数
app.
get('/',function(req,res){
res.send('hello express!');
});
(5)绑定端口号开启服务器
app.listen(3000,function(){
console.log('express app is running ...');
});
3、利用express使用art-template模板引擎(art-template模板引擎会在Node.js中
自动
渲染整个页面
<不用自己去手写渲染页面>)
(1)安装
npm install --save art-template express-art-template
(2)配置
写在“
公开指定目录资源
”后面:
app.engine('art', require('express-art-template'));
//
核心代码
(3)响应操作:
res.render('html文件名',{模板数据})
<1>会自动去读取页面对应的文件、渲染数据
<2>第一个参数不能写路径,默认会去项目中的views目录查找该模板文件(也就是说express有一个约定:开发人员把所有html文件都放在veiws目录中)
<3>这个方法默认是不可用的,只有在配置模板引擎之后才能用。
app.get
('/post',function(req,res){
res.render
('post.html');
});
4、配置
解析表单POST请求体
的插件:
body-parser
(1)安装
npm install --save body-parser
(2)配置
<1>引包
var bodyParser = require('body-parser');
<2>配置body-parser(只要加入这个配置,就会在req请求对象上多出一个属性:body):
直接通过req.body获取表单POST请求体数据
app.use(bodyParser.urlencoded({extended:false}))
app.use(bodyParser.json());
一个巩固基础的小项目(这里面都有我自己写的详细注释,对初学者来说看懂应该是可以的):
链接:https://pan.baidu.com/s/1XJaVf7ityW_d18DYZxoBnA 密码:aw21