node.js - SyntaxError: Unexpected token - 在 JSON.parse 的位置 0 的 JSON ()
问题描述
Backend code
router.route('http://localhost:5007/api/media')
.post(mediaCtrl.saveMedia)
async saveMedia(req, res) {
let file = req.files.file
let ext = req.body.extension
let path = req.body.path
if(_.isNull(file) || _.isEmpty(file)){
return res.status(400).json({
success:false,
response: null,
message: "El file vacio"
})
}
if(_.isNull(ext) || _.isEmpty(ext)){
return res.status(400).json({
success:false,
response: null,
message: "El campo extension esta vacio"
})
}
if(_.isNull(path) || _.isEmpty(path)){
return res.status(400).json({
success:false,
response: null,
message: "El campo patch esta vacio"
})
}
let fr = new FileReader()
fr.onload = () => {
let fileName = moment().unix().toString() + '_' + file.originalFilename
console.log(fr.result);
let params = {
Bucket: config.s3.bucket,
Body: fr.result,
//ContentEncoding: 'base64',
Key: path + "/" + fileName,
ContentType: file.type,
ACL: 'public-read'
}
s3bucket.putObject(params, async (err, data) => {
if(err) {
return res.json({ success: false, response: err })
}
var url = "https://" + config.s3.bucket + ".s3.amazonaws.com/" + params.Key
console.log('25131',data)
if(data) {
data["url"] = await url
}
return res.json({
success : true,
response : data
})
})
}
fr.onerror = () => {
console.log('read error')
}
fr.readAsArrayBuffer(file)
},
Frontend code
private saveAws() {
const steps: Array<any> = this.structSaveApp.steps;
if (steps[this.step_save] != undefined) {
const options: Array<any> = steps[this.step_save].options;
this.file_list.forEach((file) => {
options.forEach((item) => {
if (file.key === item.key) {
const file_multimedia: File = file.file;
const multimedia: FormData = new FormData();
multimedia.append('file', file_multimedia);
multimedia.append('extension', file_multimedia.type);
multimedia.append('path', this.user_id);
this.spinner.show();
// var object = {};
// multimedia.forEach((value, key) => object[key] = value);
// var json:any = JSON.stringify(object);
// console.log('saveAWS file',object);
this.appsService.saveAWS(multimedia).subscribe((response) => {
console.log(response);
item.value = response.response.url;
this.spinner.hide();
}, (error) => {
console.log(error);
this.spinner.hide();
});
}
});
});
}
}
service
public saveAWS(data: FormData): Observable<any> {
let headers = new HttpHeaders({
});
return this.http.post('http://localhost:5007/api/media', data, { headers: headers });
}
每当我尝试从前端上传到后端时,它都会给我一个错误,例如 Unexpected token - in JSON at position 0 at JSON.parse () erro 你能请任何人帮助我...... ..................................................... ...........
错误:SyntaxError: Unexpected token - 在 JSON.parse () 位置 0 的 JSON 中 createStrictSyntaxError (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\body-parser\lib\ types\json.js:158:10) 解析 (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\body-parser\lib\types\json.js:83: 15) 在 C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\body-parser\lib\read.js:121:18 在 invokeCallback (C:\Users\THIPPESH_PANI\Downloads \QudraforceBackend\backend\socialtools-api-media\src\node_modules\raw-body\index.js:224:16)完成(C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src \node_modules\raw-body\index.js:213:7) 在 IncomingMessage.onEnd (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\raw-body\index.js:273:7) 在 IncomingMessage.emit (events.js:327:22) 在 IncomingMessage.EventEmitter .emit (domain.js:483:12) 在 endReadableNT (_stream_readable.js:1220:12) 在 processTicksAndRejections (internal/process/task_queues.js:84:21)
解决方案
private saveAws() {
const steps: Array<any> = this.structSaveApp.steps;
if (steps[this.step_save] != undefined) {
const options: Array<any> = steps[this.step_save].options;
this.file_list.forEach((file) => {
options.forEach((item) => {
if (file.key === item.key) {
const file_multimedia: File = file.file;
const multimedia: FormData = new FormData();
multimedia.append('file', file_multimedia);
multimedia.append('extension', file_multimedia.type);
multimedia.append('path', this.user_id);
this.spinner.show();
// this.appsService.saveAWS(multimedia).subscribe((response) => {
// console.log(response);
// item.value = response.response.url;
// this.spinner.hide();
// }, (error) => {
// console.log(error);
// this.spinner.hide();
// });
let url = environment.API_BASE.CORE_MEDIA
let req =new Request(url,{
body:multimedia,
method:'POST'
});
fetch(req)
.then((response) =>response.json())
.then((response) =>{
item.value = response.response.url,
this.spinner.hide();
})
.catch((error)=>{
console.log(error);
this.spinner.hide();
})
}
});
});
}
}
实际上我正在向后端发送无效的 json 数据,所以在解析 json 时出现错误。现在我使用 fetch 和 post 方法解决了我的问题
推荐阅读
- javascript - Vue:如何在接收子组件事件的方法中引用项目和列表上下文
- arrays - 查找非 NAN 值组的第一个和结束索引
- vuejs2 - BootstrapVue 按钮状态:单击其他按钮时重置按钮
- python - 在 Pandas 中从一段时间内获取特定值
- python - 使用 pandas 中的 2 列的自定义聚合函数
- amazon-web-services - 是否可以通过 Web 界面公开 S3 存储桶?
- flutter - 如何添加自定义信息窗口颤振
- github - Github 和 VCS 之间的实现?
- javascript - 接受 00.00,000 格式的 Angular 指令
- unix - 如何让 grep 进行“单词匹配”,但不将句点视为单词分隔符?