当前位置: 首页 > 面试题库 >

如何在Express中强制将请求正文解析为纯文本而不是json?

郑哲彦
2023-03-14
问题内容

我正在像这样使用nodejs + Express(v3):

app.use(express.bodyParser());
app.route('/some/route', function(req, res) {
  var text = req.body; // I expect text to be a string but it is a JSON
});

我检查了请求标头,但缺少内容类型。即使“ Content-Type”是“ text /
plain”,它似乎也将解析为JSON。无论如何,有没有告诉中间件总是将正文解析为纯文本字符串而不是json?以前req具有req.rawBody此功能的早期版本可以解决此问题,但现在不再存在。在Express中强制将正文解析为纯文本/字符串的最简单方法是什么?


问题答案:

如果删除bodyParser()中间件的使用,则应该为文本。您可以查看bodyParser文档以获取更多信息:http : //www.senchalabs.org/connect/middleware-
bodyParser.html

删除此行:

app.use(express.bodyParser());

编辑:

看起来你是对的。同时,您可以创建自己的rawBody中间件。但是,您仍然需要禁用bodyParser()。注意:req.body仍然会undefined

这是一个演示:

app.js

var express = require('express')
  , http = require('http')
  , path = require('path')
  , util = require('util');

var app = express();

function rawBody(req, res, next) {
  req.setEncoding('utf8');
  req.rawBody = '';
  req.on('data', function(chunk) {
    req.rawBody += chunk;
  });
  req.on('end', function(){
    next();
  });
}

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.use(rawBody);
  //app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
});

app.post('/test', function(req, res) {
  console.log(req.is('text/*'));
  console.log(req.is('json'));
  console.log('RB: ' + req.rawBody);
  console.log('B: ' + JSON.stringify(req.body));
  res.send('got it');
});

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

test.js

var request = require('request');

request({
  method: 'POST',
  uri: 'http://localhost:3000/test',
  body: {'msg': 'secret'},
  json: true
}, function (error, response, body) {
  console.log('code: '+ response.statusCode);
  console.log(body);
})

希望这可以帮助。



 类似资料:
  • web API以,但是消息的格式就像是JSON一样,例如。 在Spring中,此消息使用RestTemplate处理,JSON自动映射到POJO, 这会产生以下错误: org.springframework.web.client.RestClientExcture:无法提取响应:没有找到适合响应类型[class api的HttpMessageConzer。ModelDto]和内容类型[文本/普通;

  • 问题内容: 我有以下代码: 我如何获取它来解析包含在字符串而不是文件中的XML? 问题答案: 我的代码库中有此功能,它应该对你有用。

  • 问题内容: 我有一系列使用Beautiful Soup解析为单个文本文件的HTML文件。HTML文件的格式设置为使其输出始终为文本文件中的三行,因此输出将类似于: 但这很容易 换句话说,HTML文件的内容在每个文件中并不是真正的标准,但是它们始终会产生三行。 因此,我想知道如果我想从Beautiful Soup生成的文本文件然后将其解析为带有以下内容的列的CSV文件(使用上面的示例),应该从哪里开

  • 问题内容: 我有一些这样的文字: 我想显示不带标签的内容: 我也不想应用标签,我想剥离它们。有什么简单的方法可以做到这一点? 角HTML: 问题答案: jQuery比SLOWER慢40倍左右 ,请不要将jQuery用于该简单任务。 用法: 使用angular.js: 用 :

  • 问题内容: 我有Java程序,它将从服务器接收纯文本。纯文本可能包含URL。Java库中是否有任何Class可以将纯文本转换为HTML文本?还是其他图书馆?如果没有,那该怎么办呢? 问题答案: 我找到了使用模式匹配的解决方案。这是我的代码- 这是输入和输出- 输入文字是可变的: 输出:

  • 问题内容: 我正在尝试找到一个Java lib / api,它将允许我将HTTP Request POST主体的内容转换为JSON对象。 理想情况下,我想使用Apache Sling 库(因为它们自然暴露在我的容器中)。 我找到的最接近的文件:将标头转换为JSON。 HTTP Post正文采用以下格式:所以我认为那里有些东西,但是我还没找到。 如果某些东西不存在,我可能只需要使用自定义()即可。有