Monk addToSet 重写数组
Monk addToSet rewrites array
当我在路线 /upload-ajax
中使用 Monk 的 addToSet
时,数组只是用第一个新元素重写自身。
这是我的代码:
const express = require('express');
const router = express.Router();
const debug = require('debug')('hackit:images');
const boom = require('boom');
const fs = require('fs');
const path = require('path');
const config = require('../../config');
const db = require('monk')(config.mdbConnect);
const DBposts = db.get('posts');
const multer = require('multer');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname+'/../../public/images/posts/unused')
},
filename: function (req, file, cb) {
let ext = path.extname('index.html')
if(ext!==".png"||ext===".jpg"||ext===".bmp"||ext===".gif") ext = ".jpg"
let filename = new Date().getTime()
cb(null, filename+ext)
}
})
const upload = multer({ storage: storage })
router.get('/pick-:folder', (req, res, next) => {
debug('folder -> '+req.params.folder)
const folder = __dirname+'/../../public/images/posts/'+req.params.folder
fs.readdir(folder, (err, files) => {
if(err) next(boom.resourceGone(err))
files = files.map(x => x = "/images/posts/"+req.params.folder+"/"+x)
res.send(files)
})
})
router.post('/upload-ajax', upload.single('newimg'), (req, res, next) => {
debug('upload-ajax')
debug(req.body)
debug(req.file)
if(!req.file){
res.redirect('back')
}else{
const _id = req.body.id;
let query;
if(req.body.type==="main"){
query = {$set: {postimage: "/images/posts/unused/"+req.file.filename}}
}else{
query = {$addToSet: {images: "/images/posts/unused/"+req.file.filename}}
}
debug(query)
DBposts.findOneAndUpdate({_id}, query, (err, result) => {
if(err) next(boom.badImplementation(err))
req.flash('success', 'Изображение добавлено в статью');
res.location('/admin/posts/edit-'+_id);
res.redirect('/admin/posts/edit-'+_id);
})
}
})
module.exports = router;
我做错了什么?
和尚一切安好。和所有人一样。我只是没有将最后的结果保存到视图字段中。
错误是:
- 我select新图片
- 在更新图像数组之前,我预先保存了表单中的所有字段。图像字段是空的。这就是为什么预存形式
images
参数被重写为空的原因。
- 接下来我用
addToSet
更新了我的图像,结果被写入空 images
- 接下来我重新加载 post 编辑页面,并认为我的代码没有错误。
而且做了很多次。对于我造成的混乱,大家深表歉意。
当我在路线 /upload-ajax
中使用 Monk 的 addToSet
时,数组只是用第一个新元素重写自身。
这是我的代码:
const express = require('express');
const router = express.Router();
const debug = require('debug')('hackit:images');
const boom = require('boom');
const fs = require('fs');
const path = require('path');
const config = require('../../config');
const db = require('monk')(config.mdbConnect);
const DBposts = db.get('posts');
const multer = require('multer');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname+'/../../public/images/posts/unused')
},
filename: function (req, file, cb) {
let ext = path.extname('index.html')
if(ext!==".png"||ext===".jpg"||ext===".bmp"||ext===".gif") ext = ".jpg"
let filename = new Date().getTime()
cb(null, filename+ext)
}
})
const upload = multer({ storage: storage })
router.get('/pick-:folder', (req, res, next) => {
debug('folder -> '+req.params.folder)
const folder = __dirname+'/../../public/images/posts/'+req.params.folder
fs.readdir(folder, (err, files) => {
if(err) next(boom.resourceGone(err))
files = files.map(x => x = "/images/posts/"+req.params.folder+"/"+x)
res.send(files)
})
})
router.post('/upload-ajax', upload.single('newimg'), (req, res, next) => {
debug('upload-ajax')
debug(req.body)
debug(req.file)
if(!req.file){
res.redirect('back')
}else{
const _id = req.body.id;
let query;
if(req.body.type==="main"){
query = {$set: {postimage: "/images/posts/unused/"+req.file.filename}}
}else{
query = {$addToSet: {images: "/images/posts/unused/"+req.file.filename}}
}
debug(query)
DBposts.findOneAndUpdate({_id}, query, (err, result) => {
if(err) next(boom.badImplementation(err))
req.flash('success', 'Изображение добавлено в статью');
res.location('/admin/posts/edit-'+_id);
res.redirect('/admin/posts/edit-'+_id);
})
}
})
module.exports = router;
我做错了什么?
和尚一切安好。和所有人一样。我只是没有将最后的结果保存到视图字段中。
错误是:
- 我select新图片
- 在更新图像数组之前,我预先保存了表单中的所有字段。图像字段是空的。这就是为什么预存形式
images
参数被重写为空的原因。 - 接下来我用
addToSet
更新了我的图像,结果被写入空images
- 接下来我重新加载 post 编辑页面,并认为我的代码没有错误。
而且做了很多次。对于我造成的混乱,大家深表歉意。