繁体   English   中英

如何从 NodeJS 中的另一个文件导入函数?

[英]How to import functions from another file in NodeJS?

我是 NodeJS 的新手,我在这方面有点挣扎。 我正在使用Express并验证数据,我正在使用Celebrate

我有一个route.js文件,我在其中发出POST请求,使用另一个文件中的 function 来执行此操作(它是来自MyController创建function。它工作正常!但是当我尝试对我的验证器,它不起作用。

那么让我们看一下代码。

route.js文件:

const express = require("express");

const MyController = require("./controllers/MyController");
const MyValidator= require("./validators/MyValidator");

const routes = express.Router();

routes.post("/path", MuValidator.validateCreate, MyController.create);

MyValidator文件:

module.exports = {

  validateCreate() {
    celebrate({
      [Segments.HEADERS]: Joi.object({
        authorization: Joi.string().required(),
      }).unknown(),
      [Segments.BODY]: Joi.object().keys({
        userId: Joi.string().required(),
        title: Joi.string().required(),
        description: Joi.string().required(),
        value: Joi.number().required(),
        dueDate: Joi.string().required(),
      }),
    });
  },
}

重要提示:如果我直接在我的路线上编写验证代码,我只会得到这个工作,如下所示:

routes.post(
  "/path",
  celebrate({
    [Segments.HEADERS]: Joi.object({
      authorization: Joi.string().required(),
    }).unknown(),
    [Segments.BODY]: Joi.object().keys({
      userId: Joi.string().required(),
      title: Joi.string().required(),
      description: Joi.string().required(),
      value: Joi.number().required(),
      dueDate: Joi.string().required(),
    }),
  }),
  MyController.create
);

the problem is that the celebrate function creates and returns a middleware, so the middleware returned by the celebrate function must be passed as second parameter to the post but you're passing a function that execute the celebrate method instead, so validateCreate should be:

module.exports = {
    validateCreate: celebrate({...})
}

我认为您在模块导出方面做错了

尝试这样的事情:

module.exports = {
    validateCreate: function() {},
    otherMethod: function() {},
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM