var express = require('express'); var app = express(); app.get("*", function(req, res) { console.log(req.path); res.send("req.host获取主机名,req.path获取请求路径名!"); }); app.listen(80);
query是一个可获取客户端get请求路径参数的对象属性,包含着被解析过的请求参数对象,默认为{}。html
var express = require('express'); var app = express(); app.get("*", function(req, res) { console.log(req.query.参数名); res.send("测试query属性!"); }); app.listen(80);
经过req.query获取get请求路径的对象参数值。express
格式:req.query.参数名;请求路径以下示例:
api/search?username=Lenka&company=alibaba
req.query.username // "Lenka"
req.query.company // "alibaba"api
和属性query同样,经过req.param咱们也能够获取被解析过的请求参数对象的值。浏览器
格式:req.param("参数名");请求路径以下示例:缓存
例1: 获取请求根路径的参数值,如/?n=Lenka,方法以下:app
var express = require('express'); var app = express(); app.get("/", function(req, res) { console.log(req.param("n")); //Lenka res.send("使用req.param属性获取请求根路径的参数对象值!"); }); app.listen(80); express deprecated req.param(name): Use req.params, req.body, or req.query instead
例2:咱们也能够获取具备相应路由规则的请求对象,假设路由规则为 /user/:name/,请求路径/user/mike,以下:ide
app.get("/user/:name/", function(req, res) { console.log(req.param("name")); //mike res.send("使用req.param属性获取具备路由规则的参数对象值!"); });
PS:所谓“路由”,就是指为不一样的访问路径,指定不一样的处理方法。测试
看了上面的示例,试一试使用req.param属性解析一个请求路径对象,并获取请求参数值。ui
和param类似,但params是一个能够解析包含着有复杂命名路由规则的请求对象的属性。this
格式:req.params.参数名;
例1. 如上课时请求根路径的例子,咱们就能够这样获取,以下:
var express = require('express'); var app = express(); app.get("/user/:name/", function(req, res) { console.log(req.params.name); //mike res.send("使用req.params属性获取具备路由规则的参数对象值!"); }); app.listen(80);
查看运行结果,和param属性功能是同样的,一样获取name参数值。
例2:固然咱们也能够请求复杂的路由规则,如/user/:name/:id,假设请求地址为:/user/mike/123,以下:
app.get("/user/:name/:id", function(req, res) { console.log(req.params.id); //"123" res.send("使用req.params属性复杂路由规则的参数对象值!"); });
对于请求地址具备路由规则的路径来讲,属性params比param属性是否是又强大了那么一点点呢!
http://www.expressjs.com.cn/4...
For example, when :user is present in a route path, you may map user loading logic to automatically provide req.user to the route, or perform validations on the parameter input.
router.param('user', function(req, res, next, id) { // try to get the user details from the User model and attach it to the request object User.find(id, function(err, user) { if (err) { next(err); } else if (user) { req.user = user; next(); } else { next(new Error('failed to load user')); } }); });
A param callback will be called only once in a request-response cycle, even if the parameter is matched in multiple routes, as shown in the following examples.
router.param('id', function (req, res, next, id) { console.log('CALLED ONLY ONCE'); next(); }) app.get('/user/:id', function (req, res, next) { console.log('although this matches'); next(); }); app.get('/user/:id', function (req, res) { console.log('and this matches too'); res.end(); });
On GET /user/42, the following is printed:
CALLED ONLY ONCE although this matches and this matches too
router.get('/:uid', controller.get.findByUid); router.get('/', controller.findTPList); router.put('/:uid', controller.edit); router.put('/:uid/status',controller.changeState);
api/123456
send()方法向浏览器发送一个响应信息,并能够智能处理不一样类型的数据。格式以下:res.send([body|status], [body]);1.当参数为一个String时,Content-Type默认设置为"text/html"。res.send('Hello World'); //Hello World2.当参数为Array或Object时,Express会返回一个JSON。res.send({ user: 'tobi' }); //{"user":"tobi"}res.send([1,2,3]); //[1,2,3]3.当参数为一个Number时,而且没有上面提到的任何一条在响应体里,Express会帮你设置一个响应体,好比:200会返回字符"OK"。res.send(200); // OKres.send(404); // Not Foundres.send(500); // Internal Server Errorsend方法在输出响应时会自动进行一些设置,好比HEAD信息、HTTP缓存支持等等。