[英]How to send a file via axios to an external api using node js
我是 node js 的新手,我正在开发我的 nuxt 项目的服务器端。 实际上我想将文件发送到外部 api 但我收到错误Callback must be a function
在我的 server.js 中
let formidable = require('formidable');
const bodyParser = require('body-parser')
const app = require('express')()
const cookieParser = require('cookie-parser')
var fs = require('fs');
const cors = require('cors');
const fileUploadController = require("./controllers/fileUploadController");
app.use('/uploads', fileUploadController.uploadFile)
在我的fileUploadController.js
function uploadFile(req, res, next) {
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const image = fs.readFile('./down.png');
const form = new FormData();
form.append('productName', 'Node.js Stickers');
form.append('productDescription', 'Cool collection of Node.js stickers for your laptop.');
form.append('productImage', image, 'down.png');
const response = axios.post('http://api.com/api/nuxt', form, {
headers:
{
'Content-Type': 'multipart/form-data',
}
});
}
module.exports = {uploadFile}
在fileUploadController.js
,您错误地使用了fs
的 API。 fs.readFile
接受 回调; 它不会返回您的文件。 您的代码应如下所示:
// fileUploadController.js
function uploadFile(req, res, next) {
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
fs.readFile('./down.png', async function(err, image) => {
const form = new FormData();
form.append('productName', 'Node.js Stickers');
form.append('productDescription', 'Cool collection of Node.js stickers for your laptop.');
form.append('productImage', image, 'down.png');
const response = await axios.post('http://api.com/api/nuxt', form, {
headers: {
'Content-Type': 'multipart/form-data',
}
});
});
}
module.exports = {
uploadFile
};
这需要回调的原因是因为 JavaScript 是异步的,并且不会等待 fs 在继续之前完成读取文件,因此您必须在 function 完成后执行一些操作。
不过,我个人不会使用回调; 您可以使用fs.readFileSync
或promise 版本。
除此之外,正如评论中所指出的,axios 返回一个 promise,所以你应该等待它(还要注意当前 function 声明之前的async
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.