NodeJS 为什么req.params返回一个空数组?

htrmnn0y  于 2022-12-12  发布在  Node.js
关注(0)|答案(5)|浏览(160)

我使用的是Node.js,我想查看所有已经发布到脚本中的参数。为了得到我的函数,我在routes/index.js中做了以下操作:

app.post('/v1/order', order.create);

然后在我的函数中,我有:

exports.create = function(req, res, next) {
 console.log( req.params );

但它返回的是一个空数组。但当我这样做时:

exports.create = function(req, res, next) {
 console.log( req.param('account_id') );

我得到了数据。所以我有点搞不清楚这里发生了什么。

pkln4tw6

pkln4tw61#

要求参数

只能获取此模式中请求url的参数:/user/:name

请求查询

获取查询参数(名称),如/user?name=123或主体参数。

wdebmtf2

wdebmtf22#

req.params只包含路由参数,不包含查询字符串参数(来自GET)和主体参数(来自POST)。然而param()函数会检查所有这三个参数,请参阅:
http://expressjs.com/4x/api.html#req.params

ql3eal8s

ql3eal8s3#

我也遇到过类似的问题,我想我应该把解决方案发布给那些出于同样原因来到这里的人。我的req.params是一个空对象,因为我在父路由中声明了URL变量。解决方案是在路由器中添加以下选项:

const router = express.Router({ mergeParams: true });
wmomyfyw

wmomyfyw4#

对于postman,可以有两种类型的get请求:
1.使用x-www-form-urlencoded并通过主体传递数据。
1.使用url参数
无论如何传递数据,您都可以始终使用此代码段来捕获数据。

/*
    * Email can be passed both inside a body of a json, or as 
    a parameter inside the url.

    * { email: 'test@gmail.com' } -> test@gmail.com
    * http://localhost/buyer/get/?email=test@gmail.com -> test@gmail.com
        */
    let { email }: { email?: string } = req.query;
    if (!email) email = req.body.email;
        
    console.log(email);
pxiryf3j

pxiryf3j5#

为您的server.jsapp.js添加以下内容:

app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded

相关问题