Multer图像上传出错:意外的令牌 - 在位置0的JSON中,SyntaxError:在位置0的JSON中出现意外的令牌#

时间:2018-05-20 08:19:39

标签: node.js rest http express multer

请帮我摆脱这个。这是我的uploadRouter.js,我试图使用multer模块从POSTMAN上传图像文件

form-data

我已将POSTMAN的请求消息的正文类型设置为 <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>
但是在上传图像后更改正文格式后,POSTMAN中会出现以下错误

{{1}}

POSTMAN中包含两个标题:
1.内容类型:'application / json'
2.认证:持票人[[TOKEN]]
请我无法理解错误,我对node.js很新。请帮我解决一下

3 个答案:

答案 0 :(得分:1)

我有一个类似的问题,这就是我解决的方法。

首先从客户端,不要指定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')

答案 1 :(得分:0)

当您将Content-Type作为application / json传递并上传其content-type不是json的文件时,会发生此问题。 删除此标头,因为它不是必需的。

答案 2 :(得分:0)

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

意外令牌-JSON中的位置0

意味着,响应可能不是JSON。为什么不是JSON,是因为它可能是HTML,其中包含由multer引起的错误消息。

将响应类型更改为文本并看到错误消息后,出现了错误,原因是我编写了将图像上传到的目标路径。在这种情况下,您需要将其变成相对路径,如下所示:

destination: (req, file, cb) => {
    cb(null, './uploads/images');
},

此外,请确保同时创建uploads目录和images目录,以便multer可以找到它。