NodeJS Multer NGINX Ошибка загрузки: неожиданный токен - в JSON в позиции 0 - PullRequest
0 голосов
/ 13 февраля 2020

У меня проблемы с загрузкой изображения с помощью Multer в мой NodeJS бэкэнд. Я использую Ax ios для отправки объекта FormData, содержащего изображение и некоторые данные, на мой прокси-сервер NGINX, который в конечном итоге сохранит его в моем Digital Ocean Space. Все отлично работает в моей среде разработки, но когда я пытаюсь загрузить файл в производство, я получаю эту ошибку:

SyntaxError: Unexpected token - in JSON at position 0
    at JSON.parse (<anonymous>)
    at createStrictSyntaxError ...

Поскольку я получаю только эту ошибку в производственной среде, я чувствую, что это что-то сделать с моей nginx настройкой прокси (это единственное, что отличается от производства к разработке).

Axois:

export async function createPost(formData) {
  axios.post(`${config.SERVER}/create_post`, formData, {
    headers: { Authorization: `Bearer ${localStorage.getItem("token")}` }
  });
}

Express & Multer:

const endpoint = new aws.Endpoint("sfo2.digitaloceanspaces.com/");

const s3 = new aws.S3({
  endpoint,
  accessKeyId: config.DO_SPACE_ACCESS_KEY,
  secretAccessKey: config.DO_SPACE_SECRET_KEY
});

var productionUpload = multer({
  storage: multerS3({
    s3,
    bucket: "bucket-name",
    acl: "public-read",
    contentType: multerS3.AUTO_CONTENT_TYPE,
    filename: (req, file, cb) => {
      cb(
        null,
        file.fieldname + "-" + Date.now() + `${path.extname(file.originalname)}`
      );
    }
  })
});

app.post(
  "/create_post",
  productionUpload.single("file"),
  verifyToken,
  create_post
);

Nginx Конфиг:

 location  API/ {
        proxy_pass http://localhost:3000/;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Content-Type 'application/json';

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }


Я исчерпал все опции на этом сайте и на других. Заранее спасибо!

1 Ответ

2 голосов
/ 13 февраля 2020

Это может быть проблемой, если вы передаете Content-Type как application / json и загружаете файл, тип содержимого которого не json. Удалите этот заголовок и попробуйте один раз

...