index.js 文件如何在 node.js 中工作 - .. 不是函数

问题描述

我是 node.js 编程的新手,我只是遇到了一个错误,我认为这与我的文件夹结构和使用 index.js 文件来要求函数有关。

* [config/]
  * [database.json]
  * [default.json]
* [controllers/]
  * [authController.js]
  * [index.js]
  * [restaurantController.js]
  * [serviceController.js]
  * [shiftController.js]
  * [userController.js]
* [database_access/]
  * [index.js]
  * [restaurantDb.js]
  * [userDb.js]
* [database_models/]
  * [migrations/]
  * [models/]
  * [seeders/]
* [docu/]
* [middleware/]
* [routes/]
  * [index.js]
* [services/]
  * [authService.js]
  * [index.js]
  * [restaurantService.js]
  * [userService.js]
* [utils/]


* [package-lock.json]
* [package.json]
* [server.js]

userController.js 内部,我有以下代码需要 userService 并让我使用 userService.js 中声明的所有函数文件没有错误

userController.js

const { userService } = require('../services');

const { checkIfemailIsRegistered,encryptPassword,createuser,createtoken } = userService;

// @route           POST api/users
// @description     Register a user
// @access          Public

const registerNewUser = async (req,res,next) => {
  const { email,password,firstName,lastName } = req.body;

  try {
    await checkIfemailIsRegistered(email);

    const encryptedPassword = await encryptPassword(password);

    const user = await createuser(email,encryptedPassword,lastName);

    const signedToken = await createtoken(user.userId);

    res.json({ signedToken });
  } catch (err) {
    next(err);
  }
};

module.exports = {
  registerNewUser
};

这个用户服务函数userService.js中声明如下,并且需要该文件并导出到同一文件夹下的index.js文件中:

userService.js

const { userDb } = require('../database_access');

const { userFindOneByEmailDb,createNewUserDb } = userDb;

const signToken = require('../utils/signToken');

const bcrypt = require('bcryptjs');
const config = require('config');

const checkIfemailIsRegistered = async (email) => {
  try {
    const user = await userFindOneByEmailDb(email);

    if (user == null) {
      return false;
    } else {
      throw new Error('Email is already registered');
    }
  } catch (err) {
    throw new Error(err.message);
  }
};

const encryptPassword = async (password) => {
  try {
    const salt = await bcrypt.genSalt(10);
    password = await bcrypt.hash(password,salt);

    return password;
  } catch (err) {
    throw new Error(err.message);
  }
};

const createuser = async (email,lastName) => {
  try {
    let user = await createNewUserDb(email,lastName);

    return user;
  } catch (err) {
    throw new Error(err.message);
  }
};

const createtoken = async (userId) => {
  const payload = {
    user: {
      id: userId
    }
  };

  try {
    const token = await signToken(payload,config.get('jwtSecret'));
    return token;
  } catch (err) {
    throw new Error(err.message);
  }
};

module.exports = {
  checkIfemailIsRegistered,createtoken
};


const userService = require('./userService');
const authService = require('./authService');
const restaurantService = require('./restaurantService');

module.exports = {
  userService,authService,restaurantService
};

index.js 位于 services 文件夹中:

const userService = require('./userService');
const authService = require('./authService');
const restaurantService = require('./restaurantService');

module.exports = {
  userService,restaurantService
};

我了解这种结构,而且它的服务功能可以完美地运作,并允许拥有一个清晰和干净的组织。

当我尝试对 database_access 文件执行相同的过程时,我的问题就出现了。

在我的 databas_access 文件夹中,我还有一个 index.js 文件一个 userDb.js 文件,我在其中声明了函数

index.js 在 database_access 文件夹中:

const userDb = require('./userDb');

module.exports = {
  userDb
};

userDb.js

const { sequelize,User } = require('../database_models/models');

const createNewUserDb = async (email,lastName) => {
  const defaultUserRoleId = '9dd1d40a-e11f-46bc-acbb-133a14364f90'; // SAME ID ADMIN SEED
  let userInstance;
  try {
    userInstance = await User.create({
      email: email,userRoleId: defaultUserRoleId,password: encryptedPassword,firstName: firstName,lastName: lastName
    });

    return userInstance.toJSON();
  } catch (err) {
    throw new Error(err.message);
  }
};

const userFindOneByEmailDb = async (email) => {
  try {
    const userInstance = await User.findOne({
      where: { email: email }
    });

    if (!userInstance) {
      throw new Error('User not found');
    }

    return userInstance.toJSON();
  } catch (err) {
    throw new Error(err.message);
  }
};

module.exports = {
  createNewUserDb,userFindOneByEmailDb
};


现在我在 userService.js 文件中导入这个函数来使用它们,就像我在 userController 中导入 userService.js 函数一样:

const { userDb } = require('../database_access');

const { userFindOneByEmailDb,createtoken
};

不幸的是,当我使用 userService 时出现以下错误

userFindOneByEmailDb is not a function

我已经寻找这个问题好几天了,但我仍然不明白为什么这不起作用。

如果有人能给我一些启发,我将不胜感激。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...