Ошибка при загрузке изображения Multer: неожиданный токен - в JSON в позиции 0, SyntaxError: неожиданный токен # в JSON в позиции 0 - PullRequest
0 голосов
/ 20 мая 2018

Пожалуйста, помогите мне выбраться из этого.Это мой файл uploadRouter.js, в котором я пытаюсь загрузить файл изображения из POSTMAN с помощью модуля multer

const express = require('express');
const mongoose = require('mongoose');
const autheticate = require('../authenticate');
const multer = require('multer')
const bodyParser = require('body-parser');
const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, 'public/images');
    },
    filename: (req, file, cb) => {
        cb(null, file.originalname);
    }
});
const imageFileFilter = (req, file, cb) => {
    if(!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
        return cb(new Error('You can upload only image files!'), false);
    }
    cb(null, true);
};
const upload = multer({ storage: storage, fileFilter: imageFileFilter});
//const uploadImgFile = multer().single('imageFile');
const uploadRouter=express.Router();
uploadRouter.use(bodyParser.json());
uploadRouter.route('/')
.get(autheticate.verifyUser,autheticate.verifyAdmin,(req,res,next)=>{
    res.statusCode = 403;
    res.end('GET operation not supported on /imageUpload');
})
.post(autheticate.verifyUser,autheticate.verifyAdmin,upload.single('imageFile'),(req,res,next)=>{
   res.statusCode=200;
   res.setHeader('Content-Type','application/json');
   res.end('End');
})
.put(autheticate.verifyUser,autheticate.verifyAdmin,(req,res,next)=>{
    res.statusCode = 403;
    res.end('GET operation not supported on /imageUpload');
})
.delete(autheticate.verifyUser,autheticate.verifyAdmin,(req,res,next)=>{
    res.statusCode = 403;
    res.end('GET operation not supported on /imageUpload');
})
module.exports = uploadRouter;

. Я установил тип тела сообщения-запроса на form-data от POSTMAN,
Но послеПри изменении формата тела при загрузке изображения в POSTMAN выдается следующая ошибка:

<code>    <body>
        <h1>Unexpected token - in JSON at position 0</h1>
        <h2>400</h2>
        <pre>SyntaxError: Unexpected token # in JSON at position 0
    at JSON.parse (&lt;anonymous&gt;)
    at createStrictSyntaxError (F:\Cousera\Node\coursera-node-confusion-server\node_modules\body-parser\lib\types\json.js:157:10)
    at parse (F:\Cousera\Node\coursera-node-confusion-server\node_modules\body-parser\lib\types\json.js:83:15)
    at F:\Cousera\Node\coursera-node-confusion-server\node_modules\body-parser\lib\read.js:121:18
    at invokeCallback (F:\Cousera\Node\coursera-node-confusion-server\node_modules\raw-body\index.js:224:16)
    at done (F:\Cousera\Node\coursera-node-confusion-server\node_modules\raw-body\index.js:213:7)
    at IncomingMessage.onEnd (F:\Cousera\Node\coursera-node-confusion-server\node_modules\raw-body\index.js:273:7)
    at emitNone (events.js:106:13)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1055:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)

В POSTMAN содержатся два заголовка:
1Content-Type: 'application / json'
2. Аутентификация: bearer [[TOKEN]]
Пожалуйста, я не могу понять ошибку, я очень новичок в node.js.Пожалуйста, помогите мне через это

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

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

0 голосов
/ 04 августа 2018

У меня была похожая проблема, вот как я ее решил.

Сначала от клиента не указывайте content-type

, затем при отправке запроса используйте этот метод

const file = new FormData();

если вы отправляете только файл

file.append('file', file, file.name);

, если вы отправляете файл с чем-то вроде заголовка, то

file.append('file', file, file.name);
file.append('caption', fileCaption);

затем отправьте запроск серверу, используя постоянный файл

, например (используя угловой)

this.httpClient.post<Addpost>('localhost:3000/add/addFile', file)

на сервере, вы можете перехватить запрос по

router.post('/addFile', upload.single('file')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...