Node.js Multer image upload中出错:位置0处的JSON中出现意外令牌,位置0处的JSON中出现意外令牌

Node.js Multer image upload中出错:位置0处的JSON中出现意外令牌,位置0处的JSON中出现意外令牌,node.js,rest,http,express,multer,Node.js,Rest,Http,Express,Multer,请帮我摆脱这一切。这是我的uploadRouter.js,我正在其中尝试使用multer模块从POSTMAN上传图像文件 const express = require('express'); const mongoose = require('mongoose'); const autheticate = require('../authenticate'); const multer = require('multer') const bodyParser = require('body-p

请帮我摆脱这一切。这是我的uploadRouter.js,我正在其中尝试使用multer模块从POSTMAN上传图像文件

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;
我已将请求消息的正文类型设置为来自邮递员的
表单数据

但当我上传图片时,更改了身体格式后,邮递员给出了以下错误

    <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)</pre>
    </body>
</html>

意外标记-在JSON中的位置0处
400
SyntaxError:JSON中位置0处的意外标记#
在JSON.parse(匿名)
在createStrictSyntaxError(F:\Cousera\Node\coursera节点混淆服务器\Node\U模块\body解析器\lib\types\json.js:157:10)
在解析时(F:\Cousera\Node\coursera节点混淆服务器\Node\u模块\body parser\lib\types\json.js:83:15)
在F:\Cousera\Node\coursera节点混淆服务器\Node\u模块\body parser\lib\read.js:121:18
在invokeCallback(F:\Cousera\Node\coursera节点混淆服务器\Node\u模块\raw body\index.js:224:16)
完成时(F:\Cousera\Node\coursera节点混淆服务器\Node\u模块\raw body\index.js:213:7)
在IncomingMessage.oned(F:\Cousera\Node\coursera节点混淆服务器\Node\u模块\raw body\index.js:273:7)
在emitNone(events.js:106:13)
在IncomingMessage.emit(events.js:208:7)
在endReadableNT(_stream_readable.js:1055:12)
at _combinedTickCallback(内部/流程/下一步_tick.js:138:11)
在进程中。_tick回调(内部/process/next_tick.js:180:9)
邮递员中包含两个标题:
1.内容类型:“应用程序/json”
2.身份验证:承载[[令牌]]

请注意,我无法理解错误,我对node.js非常陌生。请帮我解决这个问题

我也遇到过类似的问题,我就是这样解决的

首先从客户端开始,不要指定
内容类型

然后,在发送请求时使用此方法

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)
然后使用常量文件向服务器发出post请求

例如(使用角度)


当您将内容类型作为application/json传递并上载内容类型不是json的文件时,会出现此问题。
删除此标题,因为它不是必需的。

我也有同样的错误。发生这种情况的原因不是因为设置了内容类型。实际上,使用
multer
您不需要在标题中设置内容类型。 出现此错误的原因是响应返回的内容。在本例中,您需要JSON,但它可能已将您送回HTML。 错误状态为:

意外标记-在JSON中的位置0处

也就是说,响应可能不是JSON。之所以不是JSON,是因为它可能是HTML,包含由
multer
引起的错误消息

将响应类型更改为text并看到错误消息后,出现了一个错误,原因是我编写了要将图像上载到的目标路径。在您的情况下,您需要将其转换为相对路径,如下所示:


另外,确保创建
上传
目录和
图像
目录,以便
multer
可以找到它。

将内容类型更改为“多部分/表单数据”
this.httpClient.post<Addpost>('localhost:3000/add/addFile', file)
router.post('/addFile', upload.single('file')
destination: (req, file, cb) => {
    cb(null, './uploads/images');
},