Node.js Express - 如何获取原始数据?

时间:2017-12-11 16:01:37

标签: javascript node.js express http-post raw-data

我有一台管理登录表单页面的Express服务器:

const app = express();

// section A
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.urlencoded());

app.get('/login', userController.getLogin);
app.post('/login', userController.postLogin);

它运行正常。

然后我有另一个读取RAW DATA的控制器:

// section B
const concat = require('concat-stream');
app.use(function(req, res, next) {
  req.pipe(concat(function(data: any) {
    req.body = data;
    next();
  }));
});

app.post('*', otherController.post);

export let post = (req: any, res: Response) => {
  console.log(req.body); //i see RAW DATA
  res.end('n');
}

它也很有效。

但如果我加入这两个部分,第二部分就会停止工作。

如何才能将req.pipe仅用于B部分?

1 个答案:

答案 0 :(得分:0)

这个中间件(几乎与其他每个中间件一样)都没有办法将其从某些请求中排除,因为用户希望排除的方法可以是任何东西 - url,header,query string,loaded用户等等。相反,中间件将路径逻辑放在你身上:或者(a)明确地包含它(这意味着放置在路由上,如我们的文档中所建议的)或(b)用你自己的排除逻辑包装中间件:

AdminApp.update("MyEAR", "app", ["-appname", "MyEAR",
                "-target", "+WebSphere:" + cellName + "," + nodeName + "," + serverName,
                "-contents", "./MyEAR.ear",
                "-operation", "update"])
AdminConfig.save()