Node.js 在测试API请求响应时修改express发送的请求对象

Node.js 在测试API请求响应时修改express发送的请求对象,node.js,rest,express,Node.js,Rest,Express,我正在尝试使用express测试一个简单的API请求响应。 但是,请求对象中必须有以下字段: user.userName和user.password, 这是我迄今为止的代码: const express = require('express'); const log = require('../../../../logger'); const app = express(); const ClusterNode = require('../cluster-node'); // TODO: do

我正在尝试使用express测试一个简单的API请求响应。 但是,请求对象中必须有以下字段: user.userName和user.password, 这是我迄今为止的代码:

const express = require('express');
const log = require('../../../../logger');
const app = express();
const ClusterNode = require('../cluster-node');

// TODO: don't like these here. Needed to post. Put into global test startup if possible.
// TODO - OMRI: Reaplce this with the global test startup, when created.
const socketio = require('socket.io');
app.io = socketio.listen();
const bodyParser = require('body-parser');
app.use(bodyParser.json());


app.use('/v2/config/aw/', ClusterNode);
app.use(function(req, res, next) {
  req.user.userName = 'xxxx';
  req.user.password = 'xxxx';
  next();
});

describe('API - ClusterNode', () => {
  test('API - Get Cluster Nodes #1', () => {
    return request(app).get('/v2/config/aw/ClusterNode').then((response) => {
      expect(response.statusCode).toBe(200);
      expect(response.body.Node.length.toString()).toBe('0');
      expect(response.headers['content-type']).toMatch(/^application\/json/);
    });
  });
});
我已尝试添加以下代码块:

app.use(function(req, res, next) {
  req.user.userName = 'xxxx';
  req.user.password = 'xxxx';
  next();
});
然而,它没有起到作用。你知道怎么做吗?
提前感谢。

设置用户名和密码的中间件函数是在路由处理程序之后声明的,所以我猜它不会被调用。在你宣布你的路线之前移动它

app.use(function(req, res, next) {
  req.user = {
    'userName': 'xxxx',
    'password': 'xxxx'
  };
  next();
});
app.use('/v2/config/aw/', ClusterNode);

设置用户名和密码的中间件函数是在路由处理程序之后声明的,所以我猜它不会被调用。在你宣布你的路线之前移动它

app.use(function(req, res, next) {
  req.user = {
    'userName': 'xxxx',
    'password': 'xxxx'
  };
  next();
});
app.use('/v2/config/aw/', ClusterNode);

如果您想在
req.user
中使用用户对象,请使用:

app.use(function(req, res, next) {
 req.user = {
   'userName': 'xxxx',
   'password': 'xxxx'
 };
next();
});
app.use('/v2/config/aw/', ClusterNode);
app.use(function(req, res, next) {
 req.body.user = {
   'userName': 'xxxx',
   'password': 'xxxx'
 };
next();
});
app.use('/v2/config/aw/', ClusterNode);
如果您希望它位于您的
req.body
中,请使用:

app.use(function(req, res, next) {
 req.user = {
   'userName': 'xxxx',
   'password': 'xxxx'
 };
next();
});
app.use('/v2/config/aw/', ClusterNode);
app.use(function(req, res, next) {
 req.body.user = {
   'userName': 'xxxx',
   'password': 'xxxx'
 };
next();
});
app.use('/v2/config/aw/', ClusterNode);

如果您想在
req.user
中使用用户对象,请使用:

app.use(function(req, res, next) {
 req.user = {
   'userName': 'xxxx',
   'password': 'xxxx'
 };
next();
});
app.use('/v2/config/aw/', ClusterNode);
app.use(function(req, res, next) {
 req.body.user = {
   'userName': 'xxxx',
   'password': 'xxxx'
 };
next();
});
app.use('/v2/config/aw/', ClusterNode);
如果您希望它位于您的
req.body
中,请使用:

app.use(function(req, res, next) {
 req.user = {
   'userName': 'xxxx',
   'password': 'xxxx'
 };
next();
});
app.use('/v2/config/aw/', ClusterNode);
app.use(function(req, res, next) {
 req.body.user = {
   'userName': 'xxxx',
   'password': 'xxxx'
 };
next();
});
app.use('/v2/config/aw/', ClusterNode);

在遵循您发布的代码之后,我得到了response.code(500),当我调试调用时,我没有得到处理该请求的方法的routerd。我没有从您在req中传递用户对象的地方得到。如果您使用的是主体解析器,这意味着您应该在req.body中传递它@OmriShneoras Dhaval指出,我看不到您实际上从何处开始创建req.user,所以在您发布代码之后,我更改了我的代码来创建它,我得到了response.code(500),当我调试调用时,我没有得到处理该请求的routerd方法。我没有从您在req中传递用户对象的地方得到信息。如果您使用的是主体解析器,这意味着您应该在req.body中传递它@OmriShneoras Dhaval指出,我看不到您实际上从哪里开始创建req.user,所以我更改了代码来创建它