Javascript Can';无法从NodeJS中的Cloudinary获取图像\u id

Javascript Can';无法从NodeJS中的Cloudinary获取图像\u id,javascript,node.js,express,image-uploading,cloudinary,Javascript,Node.js,Express,Image Uploading,Cloudinary,我正在使用Node.js和Express。我只是实现了Cloudinary从用户上传图像,并将图像id存储到我的MySQL数据库中 我尝试了Cloudinary文档中的本教程:。一切正常,除了最后一步,我需要获取图像\u id var url=require('url')) var url\u parts=url.parse(req.body.coverurl,true) console.log(url\u parts)//调试 var query=url\u parts.query conso

我正在使用Node.js和Express。我只是实现了Cloudinary从用户上传图像,并将图像id存储到我的MySQL数据库中

我尝试了Cloudinary文档中的本教程:。一切正常,除了最后一步,我需要获取
图像\u id

var url=require('url'))
var url\u parts=url.parse(req.body.coverurl,true)
console.log(url\u parts)//调试
var query=url\u parts.query
console.log(query)//调试
var preload_file=new cloudinary.preload文件(query.image_id)
if(预加载的\u文件。是否有效(){
var image_id=预加载的_文件.identifier()
console.log(“Img ID:+image\u ID”)
}否则{
console.log(“上传签名无效”)
}
req.body.coverurl
类似于:
image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png#f63f1fe77c7f536447e079f3dd10829b5a15d862
url\u部分
是:

{协议:空,
斜杠:空,
auth:null,
主机:空,
端口:null,
主机名:null,
散列:“63F1FE77C7F536447E079F3DD10829B5A15D862”,
搜索:“”,
查询:{},
路径名:“image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png”,
路径:“image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png”,
href:'image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png 35; f63f1fe77c7f536447e07e079f3dd10829b5a15d862'}
并且…,变量
query
为空<代码>查询。图像\u id无效,因此无法获取图像id,也无法验证签名

我不知道为什么Cloudinary会给出这个无效的回调字符串。或者我该如何解决这个问题

谢谢你的帮助。请原谅我的英语不好:)

更新

我的提交想法.hbs


{{{imgtag}}}
拯救
在我的路线/submit.js中

router.get('/submit/idea',函数(req、res、next){
//只需使用一些Cloudinary变量呈现submit_idea.hbs
})
router.post('/submit/idea',函数(req、res、next){
var url=require('url')
var url\u parts=url.parse(req.body.coverurl,true)
var query=url\u parts.query
var preload_file=new cloudinary.preload文件(query.image_id)
if(预加载的\u文件。是否有效(){
var image_id=预加载的_文件.identifier()
console.log(“Img ID:+image\u ID”)
}否则{
console.log(“上传签名无效”)
}
//将图像id添加到mysql
})

我猜cloudinary站点中的文档是错误的或过时的。尝试验证您的上传,如下所示。它应该会起作用

router.post('/submit/idea', function(req, res, next){
  /*REMOVE THESE PARTS. I guess these are not needed any more. 
    var url = require('url')  
    var url_parts = url.parse(req.body.coverurl, true)
    var query = url_parts.query
   */
  //Directy pass coverurl to PreloadedFile method. 
  var preloaded_file = new cloudinary.PreloadedFile(req.body.coverurl)
  if (preloaded_file.is_valid()) {
    var image_id = preloaded_file.identifier()
    console.log("Img ID:" + image_id);
    // add image_id to mysql
  } else {
    console.log("Invalid upload signature")
  }
})

没错。我们的文件已经过时了!为什么使用req.body.coverurl而不是req.url?我已经更新了这个问题。我认为req.url只是得到类似于
/submit/idea
;不是上传图像的标识符。我猜您要查找的是public_id。在您的示例f08eodnwt5zqfwb2bgpd中。我想你们可以从url_部分的路径中提取它,然后尝试验证它。哦,是的!你是对的。文件已经过时了。利用你的想法,我读了这本书。所以我发现只需要使用preload文件方法,我们就可以获得
公共\u id
。太酷了。谢谢你的帮助。:)太好了,它对你有用。此外,我认为您应该在if(预加载的_file.is_valid()){……这里..}中向mysql添加图像_id