从函数中获取价值,然后使其具有全球性

时间:2019-01-09 14:00:30

标签: node.js mongodb mean-stack multer

在将数据发布到数据库时,如何从函数内部获取值以使用它?在这里,我想将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) {
    });
});

2 个答案:

答案 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}}中运行它。