首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用节点js通过axios将文件发送到外部api

如何使用节点js通过axios将文件发送到外部api
EN

Stack Overflow用户
提问于 2022-08-21 04:29:10
回答 1查看 111关注 0票数 -2

我对节点js很陌生,我正在开发我的nuxt项目的服务器端。实际上,我想向外部api发送一个文件,但是我得到了错误Callback must be a function

在我的server.js里

代码语言:javascript
复制
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

代码语言:javascript
复制
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} 
EN

回答 1

Stack Overflow用户

发布于 2022-08-21 22:47:19

fileUploadController.js中,您不正确地使用fs的API。fs.readFile接受回调;它不会返回您的文件。您的代码应该看起来有点像这样:

代码语言:javascript
复制
// 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在继续之前读取完文件,所以必须在函数完成后再执行它。

不过,我不会亲自使用回调;您可以使用fs.readFileSync承诺版本

此外,正如注释中所指出的,axios返回一个承诺,因此您应该等待它(还注意到当前函数声明之前的async )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73431647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档