请帮我摆脱这个。这是我的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 (<anonymous>)
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很新。请帮我解决一下
答案 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
可以找到它。