Javascript 快速中间件错误

Javascript 快速中间件错误,javascript,express,middleware,Javascript,Express,Middleware,我正在制作一个API,它接受视频并将其上传到cloudinary。然后,上传的元数据返回给用户。当我试图在中间件中处理视频时,我遇到了这个问题。我不知道为什么我总是犯这个错误 错误: /Users/name/test/cloudinary_upload/node_modules/express/lib/router/route.js:196 throw new Error(msg); ^ Error: Route.post() requires callback

我正在制作一个API,它接受视频并将其上传到cloudinary。然后,上传的元数据返回给用户。当我试图在中间件中处理视频时,我遇到了这个问题。我不知道为什么我总是犯这个错误

错误:

/Users/name/test/cloudinary_upload/node_modules/express/lib/router/route.js:196
        throw new Error(msg);
        ^

Error: Route.post() requires callback functions but got a [object Object]
    at Route.(anonymous function) [as post] (/Users/name/test/cloudinary_upload/node_modules/express/lib/router/route.js:196:15)
    at Function.proto.(anonymous function) [as post] (/Users/name/test/cloudinary_upload/node_modules/express/lib/router/index.js:510:19)
    at Object.<anonymous> (/Users/name/test/cloudinary_upload/routes.js:8:8)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
routes.js

'use strict';

var express = require('express');
var createThumbnail = require('./middleware/generatevideothumbnail');
var uploadToCloudinary = require('./middleware/uploadtocloudinary');
var router = express.Router();

router.post('/upload', uploadToCloudinary, createThumbnail, function(req, res, next) {
  console.log(req.cloudinaryObject);
  console.log(req.videoThumbnail);
  res.json(req.cloudinaryObject);
});

module.exports = router;
uploadtocloudinary.js

'use strict';

var cloudinary = require('../cloudinary_config.js').cloudinary;

/************************************************************
MIDDLEWARE: Accepts the request object. Uploads the video
file to cloudinary. Passes the video's public id, version, file
type, time of upload, file size and url to the next middleware
on the request object.
 ************************************************************/
function uploadToCloudinary(req, res, next) {
  cloudinary.uploader.upload(req.files.fileToUpload.path, function(resultOfUpload) {
    var cloudinaryObject = {
       public_id: resultOfUpload.public_id,
       version: resultOfUpload.version,
       typeOfFile: resultOfUpload.format, // Type of file
       uploadTime: resultOfUpload.created_at, // Upload time
       fileSize: resultOfUpload.bytes, // File size
       videoUrl: resultOfUpload.secure_url // Video URL
     }

    req.cloudinaryObject = cloudinaryObject;

    next();
  }, {
    resource_type: "video"
  });
}

module.exports.uploadToCloudinary = uploadToCloudinary;
generatevideothumbnail.js

'use strict';

/************************************************************
MIDDLEWARE: Accepts the request object. Use the version and
public id of video to create thumbnail url string. Pass
thumbnail url to next middleware on the request object.
 ************************************************************/
 function generateVideoThumbnail(req, res, next) {
  req.videoThumbnail = "https://res.cloudinary.com/xxxxxxxxx/video/upload/v"
                       + req.cloudinaryObject.version
                       + "/"
                       + req.cloudinaryObject.public_id
                       + ".jpg";

  next()
}

module.exports.generateThumbnail = generateVideoThumbnail;

使用
module.exports
时,可以选择随所需文件发送的内容。可以发送整个对象,也可以发送特定函数

使用
module.exports.uploadToCloudinary=
module.exports.generateThumbnail=
发送的对象包含函数
uploadToCloudinary
generateThumbnail
。例如,当您需要时

var createThumbnail = require('./middleware/generatevideothumbnail'); 
您可以在正在导出的对象上使用函数
generateThumbnail
。换句话说,要访问您想要的函数,您必须编写:

 createThumbnail.generateThumbnail
如果您只想在导入所需文件时只使用一个特定函数,只需将函数名指定给
module.exports
,如下所示:

module.exports = generateVideoThumbnail;
参考:


让我知道这是否有意义。

当您使用
模块.exports时,有几种不同的选项可以选择随所需文件发送的内容。可以发送整个对象,也可以发送特定函数

使用
module.exports.uploadToCloudinary=
module.exports.generateThumbnail=
发送的对象包含函数
uploadToCloudinary
generateThumbnail
。例如,当您需要时

var createThumbnail = require('./middleware/generatevideothumbnail'); 
您可以在正在导出的对象上使用函数
generateThumbnail
。换句话说,要访问您想要的函数,您必须编写:

 createThumbnail.generateThumbnail
如果您只想在导入所需文件时只使用一个特定函数,只需将函数名指定给
module.exports
,如下所示:

module.exports = generateVideoThumbnail;
参考:


让我知道这是否有意义。

如果您尝试
module.exports=
而不是
module.exports.uploadToCloudinary=
module.exports.generatethumbail=
,会发生什么?谢谢您解决了这个问题!但是为什么呢?我会发布一个答案并解释如果你尝试
module.exports=
而不是
module.exports.uploadToCloudinary=
module.exports.generatethumbail=
,会发生什么?谢谢你解决了这个问题!但是为什么呢?我会发布一个答案并解释是的,这非常有帮助。谢谢你是的,那很有帮助。非常感谢。