javascript - 如何在羽毛中分离中间件?

标签 javascript node.js express file-upload feathersjs

我用羽毛上传文件到 multer 库。我尝试将逻辑与代码分开,并且我希望将上传代码不放在 index.js 中,而是放在中间件目录中的 pdf.js 中。

下面是我的作品index.js:

'use strict';

const pdf = require('./pdf');
const record = require('./record');
const records = require('./records');

const handler = require('feathers-errors/handler');
const notFound = require('./not-found-handler');
const logger = require('./logger');

const uploadPdf = require('./upload-pdf');

module.exports = function() {
  // Add your custom middleware here. Remember, that
  // just like Express the order matters, so error
  // handling middleware should go last.

  const app = this;

  app.use('/rekord/:id.html', record(app));
  app.use('/rekordy.html', records(app));
  app.use('/pdf/:id', uploadPdf.single('file'), pdf(app));

  app.use(notFound());
  app.use(logger(app));
  app.use(handler());
};

这是 upload-pdf.js 文件:

  var multer  = require('multer')

  var storagePdf = multer.diskStorage({
    destination: 'public/pdf',
    filename: function (req, file, cb) {

      var id = req.params.id

      cb(null, id+'.pdf')
    }
  });

  module.exports = multer({
      storage: storagePdf,
      fileFilter: function (req, file, cb) {
        if (file.mimetype !== 'application/pdf') {
          return cb(null, false, new Error('I don\'t have a clue!'));
        }
      cb(null, true);
     }
     });

和 pdf.js 文件:

'use strict';

module.exports = function(app) {
  return function(req, res, next) {

    if (req.file) {
      return res.end('Thank you for the file');
    }
    return res.end('false');

    next();

  };
};

我想将 upload-pdf.js 和 pdf.js 合并到一个文件中

最佳答案

不是特别针对 Feathers,就像任何其他 Express 应用程序一样,您可以将代码放入它们自己的模块中:

'use strict';

const pdf = require('./pdf');
const record = require('./record');
const records = require('./records');

const handler = require('feathers-errors/handler');
const notFound = require('./not-found-handler');
const logger = require('./logger');

module.exports = function() {
  // Add your custom middleware here. Remember, that
  // just like Express the order matters, so error
  // handling middleware should go last.

  const app = this;

  app.use('/rekord/:id.html', record(app));
  app.use('/rekordy.html', records(app));
  app.use('/pdf/:id', pdf.upload.single('file'), pdf.process(app));

  app.use(notFound());
  app.use(logger(app));
  app.use(handler());
};

pdf.js中:

'use strict';

var multer = require('multer')

var storagePdf = multer.diskStorage({
  destination: 'public/pdf',
  filename: function(req, file, cb) {

    var id = req.params.id

    cb(null, id + '.pdf')
  }
});

exports.upload = multer({
  storage: storagePdf,
  fileFilter: function(req, file, cb) {
    if (file.mimetype !== 'application/pdf') {
      return cb(null, false, new Error('I don\'t have a clue!'));
    }
    cb(null, true);
  }
});

exports.process = function(app) {
  return function(req, res, next) {

    if (req.file) {
      return res.end('Thank you for the file');
    }
    return res.end('false');

    next();
  };
};

NodeJS module system docs对于了解它们如何组合在一起非常有帮助。

关于javascript - 如何在羽毛中分离中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41488188/

相关文章:

从 Firefox Web 扩展执行 Javascript shell 命令

javascript - 如何正确使用 Backbone.js 集合来显示列表

javascript - 在 URL 中设置请求 header ?

ruby-on-rails - 一直强制推heroku有什么坏处吗

express - Express-发出解析查询参数,错误的请求

ios - POST header 和正文之间的随机延迟

javascript - 在 GET 方法中传递 angularJs 中的参数

javascript - TDD原理,如何让测试失败

node.js - bcryptjs 中的加密和解密

javascript - Nodejs HTTP.get() 添加用户代理