7

我正在使用 Express 3,并且想处理文本/纯POST。

Express 3 现在使用connect 的 bodyParser(我认为旧的 Express 代码已移至 connect)。bodyParser 的文档提供了一些有关如何使其支持其他文件类型的详细信息。我发现了一篇关于如何在旧版本的 Express 中处理 text/plain的优秀博客文章)。

  • 我是否应该明确要求连接(并让节点要求缓存修改后的版本)?还是通过快递在某处暴露?

  • connect.bodyParser 没有“解析”键。

如何使 Express(通过连接)处理文本/纯 POST?

4

5 回答 5

26

使用bodyParser作为依赖项,将其添加到您的app.js文件中。

var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.text());

快乐点头。

于 2015-10-09T12:33:18.217 回答
25

https://gist.github.com/3750227

app.use(function(req, res, next){
  if (req.is('text/*')) {
    req.text = '';
    req.setEncoding('utf8');
    req.on('data', function(chunk){ req.text += chunk });
    req.on('end', next);
  } else {
    next();
  }
});

将文本添加为​​ req.text

于 2012-09-19T15:22:13.523 回答
5

在 express.js "^4.16..." 中,以下代码对我来说很好:

// parse an HTML body as a string
app.use(bodyParser.text({ type: 'text/*' }))

代码的扩展部分如下:

// parse an HTML body as a string
app.use(bodyParser.text({ type: 'text/*' }))

// Enable CORS for ExpressJS
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS')
  res.header('Access-Control-Allow-Credentials', true)
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Methods, Credentials')
  next()
})


// Api url 
app.post('/api/myApi', (req, res) => {

  const bodyJson = JSON.parse(req.body)
  // do something

}
于 2019-04-28T02:53:10.463 回答
2

我只会制作一个类似于json.js中间件模块的模块,而不必费心将buf数据转换为其他任何东西。将其包装到一个plain.js文件中,应用一些体面的“不要重复自己”重构,然后提交拉取请求以进行连接。看起来一般很方便。但是,请注意,虽然方便,但足够大的请求主体将需要在某些时候直接流式传输到磁盘,这样您就不会消耗节点服务器中的所有内存。

于 2012-09-19T15:09:32.227 回答
0

你可以试试这个:

var expressApi= (req, res,params)=>{
    console.log('req.body',params);
    var body = '';
    req.on('data', function (data) {
        body += data;
    });
    req.on('end', function () {
        res.write({status:200,message:'read data'}); 
    }); 
}
于 2019-05-01T12:28:30.357 回答