我使用Multer软件包进行上传。在上传图片之前,我必须检查令牌。没有问题
.single()
req.body.token
.
*检查令牌功能:
_checkToken = (token) => {
return User.
findOne({'token':token},'_id')
.then((data) => {
if(data) return data._id.toString()
else return 'invalid'
})
}
*请求\u checkToken():
let userId
checkRequest = (data) => {
return new Promise((resolve,reject)=>{
let token = data.token
if(token){
_checkToken(token).then((auth) => {
if(auth.length==24){
_userId = mongoose.mongo.ObjectID(auth)
resolve('valid')
}
else{
resolve('invalid')
}
}).catch(err => reject('invalid'))
}
})
}
var storage = multer.diskStorage({
destination: function (req, file, cb) {
checkRequest(req.body).then((check)=>{
if(check=='valid'){
let newPost = new Post()
newPostId = newPost._id
let dir = `./data/posts/${newPostId}`;
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
}
cb(null, dir)
}
else return false
})
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
})
var uploadImages = multer({ storage: storage }).single('image')
*路线
routes.post('/post', (req,res) => {
uploadImages(req,res,(err)=>{
if(err) res.send('error')
else{
if(newPostId){
// ...
let data = {
_id: newCampaignId,
// ...
}
Post.create(data).then((p)=>{
res.send('done')
})
}
}
})
})
.array('images')
而不是
.single('image')
请求主体令牌
因为
_checkToken(token)
invalid
.