【问题标题】:Handling text/plain in Express (via connect)?在 Express 中处理文本/纯文本(通过连接)?
【发布时间】:2012-09-11 22:02:14
【问题描述】:

我正在使用 Express 3,并希望处理 text/plain POST。

Express 3 现在使用connect's bodyParser(我认为旧的 Express 代码已移至连接)。 bodyParser 的文档提供了一些有关如何使其支持其他文件类型的详细信息。我发现了一篇关于如何handling text/plain was done in old versions of Express 的优秀博客文章。

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

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

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

【问题讨论】:

    标签: node.js express connect


    【解决方案1】:

    你可以试试这个:

    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'}); 
        }); 
    }
    

    【讨论】:

    • 这不是真正地道的表达-最好使用bodyParser()
    • 但它是纯 JavaScript 的,对吧?没有任何框架,你是对的兄弟
    • 是的,但这是一个明确的问题。见标题。
    【解决方案2】:

    在 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
    
    }
    

    【讨论】:

      【解决方案3】:

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

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

      点头愉快。

      【讨论】:

        【解决方案4】:

        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

        【讨论】:

        • 正如@oozzal 建议的(下),使用:app.use(bodyParser.text());无需上述代码即可工作。
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2021-12-15
          • 2018-05-26
          • 1970-01-01
          • 1970-01-01
          • 2022-11-06
          • 2018-10-29
          • 2011-11-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多