Node 使用express框架
安装express框架
新建一个空的文件夹,作为项目的根目录,进入该文件夹之后,执行npm install express
use、get、post
const express = require("express"); var server = express(); server.get("/a.html",function(request,response){ console.log("只能使用get方式请求a.html"); }); server.post("/b.html",function(request,response){ console.log("只能使用post方式请求b.html"); }); server.use("/c.html",function(request,response)){ console.log("可以使用get或者post方式请求c.html") } server.listen(8081);
express().get()表示接受get请求,express().post()表示接受post请求。此时不能使用get方式请求一个绑定了post方法的路由,同理,也不能使用post方法请求一个绑定了get方法的路由,即绑定什么方法,就用什么方式请求才行,除非有use。
express().use()表示即可接受get请求,又可接受post请求。
返回给客户端数据
const express = require("express"); var server = express(); server.use("/a.html",function(request,response){ response.send("aaaaaaa"); }); server.use("/b.html",function(request,response){ response.send("bbbbbbbb"); }); server.listen(8080);
注意上面的response、request这两个对象,并不是http的那个request和response。而是在http的request和response的基础上增加了一些使用比较方便的接口,而且以前的方法仍旧能用。
比如之前的write()只能写字符串,现在send()不但可以写字符串,还可以写json格式的对象。同时write()仍旧能用
安装express-static
执行npm install express-static。即可完成安装
问什么使用express-static
虽然我们可以像上面的那样,为每一个文件都绑定一个get、post或者use,但是这个是不现实的。毕竟普通项目的文件成千上万,岂不是要累死?
当然也可以为一些特定的文件绑定get、post或者use,其他的文件使用if else 或者switch case来判断,比如是否绑定了路由,是否需要后端处理,还是直接返回文件内容?如果是直接返回文件内容的话,可以使用fs模块,将内容读出来之后,返回给客户端。
上面的多少都有点麻烦,使用express-static模块配合express框架,真的很方便
const express = require("express"); const expressStatic = require("express-static"); var server = express(); server.use("/a.html",function(request,response){ response.send("aaaaaaa"); }); server.use("/b.html",function(request,response){ response.send("bbbbbbbb"); }); server.listen(8080); server.use(expressStatic("./www"));
除了对a.html和b.html的请求会被拦截下来,需要进行处理之后返回客户端响应。客户端对其他文件,比如对c.html的文件请求,服务器会直接返回/www/c.html文件,不用再使用fs来实现。很方便吧!
express框架下的request和response有很多属性和方法,具体参考如下:
request : 以访问http://localhost:8080/a.html?name=abc&age=50为例
req.baseUrl:获取路由当前安装的URL路径 ->/a.html?name=abc&age=30 req.hostname / req.ip:获取主机名和IP地址 ->localhost req.originalUrl:获取原始请求URL ->/a.html?name=abc&age=30 req.params:获取路由的parameters ->{} req.path:获取请求路径 ->/ req.protocol:获取协议类型 ->http req.query:获取URL的查询参数串 ->{ name: 'abc', age: '30' } req.route:获取当前匹配的路由 ->undefined
response
res.app:同req.app一样 res.append():追加指定HTTP头 res.set()在res.append()后将重置之前设置的头 res.cookie(name,value [,option]):设置Cookie opition: domain / expires / httpOnly / maxAge / path / secure / signed res.clearCookie():清除Cookie res.download():传送指定路径的文件 res.get():返回指定的HTTP头 res.json():传送JSON响应 res.jsonp():传送JSONP响应 res.location():只设置响应的Location HTTP头,不设置状态码或者close response res.redirect():设置响应的Location HTTP头,并且设置状态码302 res.render(view,[locals],callback):渲染一个view,同时向callback传递渲染后的字符串,如果在渲染过程中有错误发生next(err)将会被自动调用。callback将会被传入一个可能发生的错误以及渲染后的页面,这样就不会自动输出了。 res.send():传送HTTP响应 res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type res.set():设置HTTP头,传入object可以一次设置多个头 res.status():设置HTTP状态码 res.type():设置Content-Type的MIME类型