我正在使用Express 3,并希望处理 text / plain POST。
Express 3现在使用connect's bodyParser(我认为旧的Express代码已移至连接)。 bodyParser的文档提供了有关如何使其支持其他文件类型的一些详细信息。我发现了一篇关于如何handling text/plain was done in old versions of Express)的优秀博客文章。
我是否应该明确要求连接(并且让节点需要缓存修改后的版本)?或者是通过express某处显示连接?
connect.bodyParser没有'解析'键。
如何使Express(通过连接)处理文本/普通POST?
答案 0 :(得分:21)
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
答案 1 :(得分:14)
以bodyParser为依赖项,将其添加到app.js
文件中。
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.text());
快乐的Noding。
答案 2 :(得分:2)
我只是创建一个类似于json.js中间件模块的模块,并且不用费心将buf
数据转换为其他任何内容。将其包装到plain.js
文件中,应用一些体面的“不要重复自己”重构,然后提交拉取请求进行连接。看起来通常很方便。但请注意,虽然方便,但是足够大的请求主体需要在某些时候直接流式传输到磁盘,因此您不会占用节点服务器中的所有内存。
答案 3 :(得分:0)
在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
}
答案 4 :(得分: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'});
});
}