node是一个JavaScript运行时环境
浏览器中的JavaScript(ECMA标准、DOM、BOM)
node中没有(DOM、BOM),有核心模块
特性:非阻塞IO模型和事件驱动
node 三模块
- 核心模块(由node提供的http、fs、os、path。。。)
- 第三方模块(express框架。。。)
- 用户自定义模块(js文件)
node.js API地址:http://nodejs.cn/api/
express.js API地址:http://www.expressjs.com.cn/
Content-Type:设置地址http://tool.oschina.net/commons
基本的服务端脚本
/*加载http服务器*/
var http = require('http');
/*加载文件操作*/
var fs = require("fs");
/*创建一个web服务器,用server实例接收*/
var server = http.createServer();
/*监听request请求事件,设置请求处理函数*/
server.on("request",function (request,response) {
var url = request.url;
if(url === "/"){
fs.readFile("./04请求文件.html",function (error,data) {
if(error){
response.setHeader("Content-Type","text/plain;charset=utf-8");
response.end("文件加载失败,请稍后重试。。。");
}else{
response.setHeader("Content-Type","text/html;charset=utf-8");
response.end(data);
}
})
}else if(url ==="/meimei"){
fs.readFile("./meimei.jpg",function (error,data) {
if(error){
response.setHeader("Content-Type","text/plain;charset=utf-8");
response.end("文件加载失败,请稍后重试。。。");
}else{
response.setHeader("Content-Type",'image/jpeg');
response.end(data);
}
})
}
});
/*绑定端口号,启动服务*/
server.listen("3000",function () {
console.log("Server is running");
})
中间件:app.use(err,request,response,next)
next():是一个函数,调用next(),会找下一个被匹配的use()中间件
当next(err)传入一个参数,会直接找到带有4个参数的中间件
// 中间件:处理请求的,本质就是个函数
在 Express 中,对中间件有几种分类
当请求进来,会从第一个中间件开始进行匹配
如果匹配,则进来
如果请求进入中间件之后,没有调用 next 则代码会停在当前中间件
如果调用了 next 则继续向后找到第一个匹配的中间件
如果不匹配,则继续判断匹配下一个中间件
不关心请求路径和请求方法的中间件
也就是说任何请求都会进入这个中间件
中间件本身是一个方法,该方法接收三个参数:
// 全局中间件(肯定会进入)
app.use(function (req, res, next) {
console.log('1')
next()
})
// 以 /xxx 开头的路径中间件 请求了/a才会进来的
app.use('/a', function (req, res, next) {
console.log('a')
next()
})
// 除了以上中间件之外,还有一种最常用的
// 严格匹配请求方法和请求路径的中间件
// app.get
// app.post
。。。。。