在将数据发布到数据库时,如何从函数内部获取值以使用它?在这里,我想将multer.diskStorage
内的imageName的值设置为全局值,以便在发布数据库路径时可以使用它
var imageName;
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './public/assets/images');
},
filename: function (req, file, cb) {
if (!file.originalname.match(/\.(png|jpg|jpeg)$/)) {
var err = new Error();
err.code = 'filetype';
return cb(err);
} else {
imageName = Date.now() + '_' + file.originalname;
cb(null, imageName);
}
}
});
router.post('/newsfeeds', parser.single("myfile"), function (req, res) {
newsfeed.path = imageName;
newsfeed.save(function (err) {
});
});
答案 0 :(得分:0)
这是一种实现multer
的方法。您可以将upload
用作函数或中间件,我将其用作函数是因为它使我可以更详细地处理错误。
并不需要全局变量,在这种情况下,multer处理图像时,图像信息将req.file
属性填充为filename
属性,因为我们现在在{ {1}}这是我们需要的自定义值。
req.file.filename
在这里您可以找到包含图像其余属性的表格
const multer = require('multer'); const multerStorage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './public/assets/images'); }, filename: function (req, file, cb) { if (!file.originalname.match(/\.(png|jpg|jpeg)$/)) { var err = new Error(); err.code = 'filetype'; return cb(err); } else { const imageName = Date.now() + '_' + file.originalname; cb(null, imageName); } } }); const upload = multer({ storage: multerStorage }).single('myfile'); router.post('/newsfeeds',(req, res) => { upload(req, res, function (err) { if (err || !req.file) { // An error occurred while loading the image. return res.status(400); } newsfeed.path = req.file.filename; newsfeed.save(function (err) { }); }); });
处理完图像后所拥有的。 Documentation
答案 1 :(得分:0)
在编程社区中,全局变量往往不被接受,因此您首先应该问自己是否真的想要这么做。
但是,如果您确定这是最好的方法,则可以在Node中将属性附加到global
变量中。在浏览器中,您可以将其附加到window
。
关于执行顺序的问题(根据操作员的评论),可以向全局范围添加Promise
而不是值。然后,无论何时需要该值,都可以调用该值的.then()
,或在具有async function
的{{1}}中运行它。