问题描述
我是 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 (将#修改为@)