Node.js NodeJS-表单数据模块,带有基本身份验证的POST文件
试图将文件映像发布到要求其为formData的服务器。使用表单数据模块对此进行帮助。我一直在引用文档 使用以下代码,我收到一个401错误,因为我没有传递密码;有道理Node.js NodeJS-表单数据模块,带有基本身份验证的POST文件,node.js,authentication,https,multipartform-data,Node.js,Authentication,Https,Multipartform Data,试图将文件映像发布到要求其为formData的服务器。使用表单数据模块对此进行帮助。我一直在引用文档 使用以下代码,我收到一个401错误,因为我没有传递密码;有道理 const form = new FormData(); form.append('image', fs.createReadStream('./my-image.jpg')); form.submit({ host: 'XXX.XXX.XXX.XXX', method: 'POST', path: '
const form = new FormData();
form.append('image', fs.createReadStream('./my-image.jpg'));
form.submit({
host: 'XXX.XXX.XXX.XXX',
method: 'POST',
path: '/api/config',
}, function(err, res) {
console.log(res.statusCode);
});
但是,如果我添加密码,它将完全失败,并且res是未定义的
const form = new FormData();
form.append('image', fs.createReadStream('./my-image.jpg'));
form.submit({
host: 'XXX.XXX.XXX.XXX',
method: 'POST',
auth: ':mypassword',
path: '/api/config',
}, function(err, res) {
console.log(res.statusCode);
});
如果我在Postman中使用基本身份验证设置了相同类型的formData,它就可以工作了
想法?我建议使用请求/请求承诺模块,看看您的身份验证问题是否得到解决
const request = require('request-promise');
request({
url: 'url',
method: 'POST',
auth: {
user: 'user',
password: 'password'
},
formData: {
image: fs.createReadStream('./my-image.jpg')
}
})
.then(console.log)
.catch(console.error)
更新:
错误报告代码:“HPE\U无效头\U令牌”,原因:“无效头”
代币'
尝试使用以下解析器:
如果您使用的是节点12.x,请使用-http parser=legacy标志运行节点
同时检查以下问题:是否发送用户?,显示错误,如果未定义res,则显示错误。不需要用户,仅密码console.logerr和显示输出。正如我在下面解释的,也可以尝试请求。错误报告代码:“HPE\u无效的\u头\u令牌”,原因:“无效的头令牌”,请尝试请求,以防表单数据出于某种原因生成无效请求。节点12中似乎存在问题,对于某些请求也是如此:尝试了请求和http解析器js,仍然没有骰子。它的工作原理是,一旦我添加了解析器,就得到了200条回复。但是,它实际上并没有获取图像,响应包括您访问了默认HTTP处理程序。派生一个新的处理程序并在主体中实现。因此,显然服务器真的希望映像密钥被称为“file”而不是“image”,这使得上面的工作不需要解析器。谢谢
// Monkey patch before you require http for the first time.
process.binding('http_parser').HTTPParser = require('http-parser-js').HTTPParser;