Node+Express面试题


express面试题

1.安装express

npm install express

2.启动express服务器

var express = require('express');
var app = express();
app.listen(80);

3.配置路由

语法:app.方法('路径',回调函数)

例子:

app.get('/',function(req,res){req.send('000')});
app.post('/',function(req,res){req.send('0000')});

4.在路由中应用参数

使用查询字符串,使用POST参数,使用正则表达式,使用定义的参数

使用查询字符串

var express = require('express');
var app = express();
app.post('/find',function(req,res){
        var url_parts = url.parse(req.url,true);
        var query = url.parse(req.url,true);
        res.send('Finding Book:Author:' + query.author + 'Title: ' + query.title);
})

req.url获取路径

url.parse:把路径解析为一个对象

有两个参数,第二个参数为true的时候,把解析的字符串转变成对象,通过query来访问

https://blog.csdn.net/qq_45830543/article/details/113035212?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

使用已定义的参数应用回调函数

app.apram('userid',function(req,res,next,value){
	console.log("Request with userid: " + value);
	next();
});

例如:URL为/user/1009

console.log()语句为Userid:1009 

5.参数接收

在express中,接收参数的方式有3种,一种是用路由参数,URL查询字符串参数,body(HTTP请求体)参数

(1)路由参数

router.get('/user/:id',function(req,res,next){
     res.send("Get User: " + req.param("id"));
})

路由参数通过req.params取值。在上面示例中,/user/:id路由中的:id参数是一个变量,可以通过req.params.id接收这个变量的值。 

例如,URL是:/user/:0001

res.send()方法返回值是:GET User, 0001

 (2)URL查询字符串参数

指url中传递的参数req.query

当我们发送一个GET /user?id=1&name=myName请求时,接收这个对象使用如下方法:

console.log(req.query);  // {id:'1', name:'myName'}

(3)body(HTTP请求体)参数

body参数用req.body对象接收(需要通过body-parser模块处理),body参数指的是HTTP请求中的参数。在HTTP请求方法中,只有POST,GET,PATCH三种方法存在请求体,在其他请求方法中,req.body是一个空对象。

req.body;  // 接收HTTP请求体中的参数

6.不同HTTP请求方法中 的参数接收

get,post,put,delete,options,track,connect,head,patch9种请求方法

目的测试express.js对各类HTTP请求的支付情况和各种HTTP请求方式和参数接收情况

(1)定义路由和客户端代码

使用request来实现一个HTTP客户端,客户端中添加:路由参数,URL查询字符串参数和body参数

通过变更options.method参数实现不同方式HTTP请求

var request = require('request');
/**
*请求的URL包含一个query参数和params参数
*请求方法分别使用'get','head','post','put','delete','connect','options','track','patch'
*/
var options = {
    url:'https://127.0.0.1:3000/node?q='+encodeURIComponent('IT笔录'),
    method: 'GET',
    headers:{
        'Content-Type':'application/x-www-form-urlencoded'
    }
    body:'form=itbilu.com' 
}
function callback(err,response,body){
    if(!error && response.statusCode == 200){
        var info = JSON.parse(body);
        console.log(info);
    }
}

router.all():客户端所有的类型HTTP请求都会发送到这个路由中。

/* 一个处理所有请求的中间件 */
router.all('/:path', function(req, res, next){
  // 客户端请求使用的HTTP方法
  var method = req.method;
  // URL 查询字符串参数
  var query = req.query;
  // body(HTTP请求体)参数
  var body = req.body;
  // 路由(路径)参数
  var params = req.params;

  console.log(method);
  console.log('query:', query);
  console.log('body:', body);
  console.log('params:', params);
  next();
});

  (2)HTTP请求的接收

下面是HTTP客户端发送不同类型HTTP请求后,express应用对各种请求的方式的参数接收情况

GET 请求

GET
query:{ q: 'IT笔录' }
body:{ from: 'itbilu.com' }
params:{ path: 'node' }
GET /node?q=IT%E7%AC%94%E5%BD%95 

HEAD请求

HEAD
query:{ q: 'IT笔录' }
body:{}
params:{ path: 'node' }
HEAD /node?q=IT%E7%AC%94%E5%BD%95 

HEAD请求时,客户端不能包含body参数,否则会报错

POST请求

POST
query:{ q: 'IT笔录' }
body:{ from: 'itbilu.com' }
params:{ path: 'node' }
POST /node?q=IT%E7%AC%94%E5%BD%95

PUT请求

PUT
query:{ q: 'IT笔录' }
body:{ from: 'itbilu.com' }
params:{ path: 'node' }
PUT /node?q=IT%E7%AC%94%E5%BD%95

DELETE请求

DELETE
query:{ q: 'IT笔录' }
body:{ from: 'itbilu.com' }
params:{ path: 'node' }
DELETE /node?q=IT%E7%AC%94%E5%BD%95 

CONNECT请求

// 无返回,request模块不支付

OPTIONS请求

OPTIONS
query:{ q: 'IT笔录' }
body: { from: 'itbilu.com' }
params:{ path: 'node' }
OPTIONS /node?q=IT%E7%AC%94%E5%BD%95

TRACE请求

TRACE
query:{ q: 'IT笔录' }
body:{ from: 'itbilu.com' }
params:{ path: 'node' }
TRACE /node?q=IT%E7%AC%94%E5%BD%95

PATCH请求

PATCH
query:{ q: 'IT笔录' }
body:{ from: 'itbilu.com' }
params:{ path: 'node' }
PATCH /node?q=IT%E7%AC%94%E5%BD%95

总结:

经过上面的测试我们可以得出以下结论:

  • Experss与HTTP标准不尽一致,除HEADCONNECT请求方法外,其它请求方式均支付三种参数接收方式。
  • Express在处理各类HTTP请求时没有严格按HTTP标准执行,在HTTP标准中只有POSTPUTPATCH三种请求方式中存在HTTP请求体(即:body参数),但在Express及其中间件解析时,除HEAD方法外并没有区分body参数
  • 除不被支持的CONNECT方法外,其它所有接收方式均支付URL查询字符串参数路由参数。

在使用Express应用和Express路由及中间件时,建议按HTTP标准进行处理和参数传递。尤其是body参数,在标准中只有POSTPUTPATCH三种方式可以传递body HTTP请求体,除这三种方式外,建议不要使用req.body方法。

Express.js 应用-路由定义和不同HTTP请求方式传递参数的接收 - IT笔录

express基础复习(node.js版)_小白菜的博客-CSDN博客_express面试题

nodejs面试题_白冬雷的博客-CSDN博客_koa2面试题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值