【问题标题】:POST http://localhost:3000/sort net::ERR_ABORTED 500 (Internal Server Error)POST http://localhost:3000/sort net::ERR_ABORTED 500(内部服务器错误)
【发布时间】:2023-02-14 04:10:17
【问题描述】:

我正在尝试将文件上传到 API,对数字进行排序,然后将结果返回到另一个可供下载的文本文件中。我上传文件,开始计算时出现内部服务器错误。 API 在端口 3000 上运行,我在端口 3001 上启动 React App.js。 我做错了什么吗?

这是 API 的 app.js:

const express = require('express');
const multer = require('multer');
const bodyParser = require('body-parser');
const fs = require('fs');
const app = express();

const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

app.use(bodyParser.text({ type: 'text/plain' }));

app.post('/sort', upload.single('inputFile'), (req, res) => {
    console.log(req.file)
    const input = req.file.buffer.toString().split('\n').map(Number);
    const result = input.sort((a, b) => b - a);
    const resultText = result.join('\n');
    fs.writeFile('result.txt', resultText, (err) => {
        if(err) throw err;
        res.send('File succesfully sorted!');
    });
    res.set('Content-Type', 'text/plain');
    res.send(resultText);
});

app.listen(3000, () => {
    console.log('API is listening on port 3000');
});

这是 React App.js:

 const [inputFile, setInputFile] = useState(null);
  const [result, setResult] = useState(null);
  const [processingTime, setProcessingTime] = useState(null);

  const handleFileUpload = (event) => {
    setInputFile(event.target.files[0]);
  };

  const startCalculation = async (event) => {
    event.preventDefault();
    const startTime = performance.now();
    const formData = new FormData();
    formData.append('inputFile', inputFile);
    console.log(inputFile)

    const response = await fetch("http://localhost:3000/sort", {
      method: 'POST',
      body: formData,
      mode: 'no-cors',
    });

    const data = await response.text();
    console.log(data);
    setResult(data);
    setProcessingTime(performance.now() - startTime);

  };

  const handleDownload = (event) => {
    event.preventDefault();
    const file = new Blob([result], {
      type: 'text/plain'
    });
    const fileURL = URL.createObjectURL(file);
    const link = document.createElement('a');
    link.href = fileURL;
    link.download = 'result.txt';
    link.click();
  };

【问题讨论】:

    标签: node.js reactjs api


    【解决方案1】:

    问题出在您将输入名称设置为inputFile 的客户端上,但是,在后端您告诉Multer 输入名称是myFile

    从此改变:

    upload.single("myFile")

    对此:

    upload.single("inputFile")

    【讨论】:

      猜你喜欢
      • 2017-08-17
      • 2016-07-29
      • 1970-01-01
      • 2022-11-07
      • 2015-09-04
      • 2021-06-24
      • 1970-01-01
      • 2023-02-20
      • 2012-03-16
      相关资源
      最近更新 更多