Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用require传递函数_Javascript_Require_Module.exports - Fatal编程技术网

Javascript 用require传递函数

Javascript 用require传递函数,javascript,require,module.exports,Javascript,Require,Module.exports,我想用require传递函数。代码如下: multerModule.js const path = require('path'); const multer = require('multer'); const crypto = require('crypto'); const GridFsStorage = require('multer-gridfs-storage'); // Create storage engine const initStorage = (conn, bucket

我想用require传递函数。代码如下:

multerModule.js

const path = require('path');
const multer = require('multer');
const crypto = require('crypto');
const GridFsStorage = require('multer-gridfs-storage');

// Create storage engine
const initStorage = (conn, bucketName) => new GridFsStorage({
  db: conn,
  file: (req, file) => {
    return new Promise((resolve, reject) => {
      crypto.randomBytes(16, (err, buf) => {
        if (err) {
          return reject(err);
        }
        const filename = buf.toString('hex') + path.extname(file.originalname);
        const fileInfo = {
          filename: filename,
          bucketName: bucketName
        };
        resolve(fileInfo);
      });
    });
  }
});


const initUpload = (storage) => multer({
  storage: storage,
  fileFilter: function (req, file, callback) {
    const ext = path.extname(file.originalname);
    if (ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') {
      return callback(new Error('Only images are allowed'))
    }
    callback(null, true)
  }
});

module.exports = { initStorage, initUpload };
offers.js

const router = require('express').Router();
const auth = require('../../middleware/auth');
const mongoose = require('mongoose');
const Grid = require('gridfs-stream');

const collectionName = 'offers';
const bucketName = 'offers';

const { initStorage, initUpload } = require('../../modules/multerModule');

const conn = mongoose.connection;
Grid.mongo = mongoose.mongo;
// Init gfs
let gfs;

conn.once('open', () => {
  // Init stream
  gfs = Grid(conn.db);
  gfs.collection(collectionName);
});

const storage = initStorage(conn, bucketName);

const upload = initUpload(storage);
我得到了TypeError:存储不是一个函数

我想我可以这样写(如果我错了请纠正我):


,但这不是通过模块箭头函数之前定义的第一种方法吗?

现在,您的
storage
变量包含
new GridFsStorage
解析为的类型
newx
通常解析为某个对象的实例,而不是普通函数。实例通常都有方法,但是一个实例在它自己的组中几乎从来都不是一个函数,对于这个主题我很抱歉,我只是将名称storage改为initStorage,并将upload改为initUpload,但忘记了保存。然而,这种方法工作得很好,但让它在这里,也许有人谁会有一个问题,这可以找到这个解决方案的帮助。我在这里也得到很多帮助。
module.exports = {
    function1: function(params) {//do something},
    function2: function(nextparams){//do something}
}