我对节点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} 发布于 2022-08-21 22:47:19
在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在继续之前读取完文件,所以必须在函数完成后再执行它。
不过,我不会亲自使用回调;您可以使用fs.readFileSync或承诺版本。
此外,正如注释中所指出的,axios返回一个承诺,因此您应该等待它(还注意到当前函数声明之前的async )。
https://stackoverflow.com/questions/73431647
复制相似问题