【发布时间】:2022-01-07 17:35:28
【问题描述】:
我在构建 NodeJS express API 时遇到了一些错误(?)。显然一些端点相互重叠,这意味着我无法到达它们,请求在超时之前不会结束。
例如:
const load_dirs = (dirs, filename) => {
const router_files = readdirSync(`./${dirs}`).filter(file => file.endsWith(`${filename}.js`));
router_files.forEach(file => {
const {
getUsers, getUser, addUser, editUser, removeUser, loginUser, updateUserStatus
} = require(`../${dirs}/${file}`);
router
.route('/')
.get(cors(corsOptions), getUsers)
.post(cors(corsOptions), addUser);
router
.route('/login')
.post(cors(corsOptions), loginUser);
router
.route('/:userId')
.get(cors(corsOptions), getUser)
.post(cors(corsOptions), editUser)
.put(cors(corsOptions), removeUser);
router
.route('/:userId/status')
.post(cors(corsOptions), updateUserStatus);
});
}
['methods'].forEach(e => load_dirs(e, 'users'));
module.exports = (router);
如果登录方法高于通过 Id 获取用户,我无法通过 Id 访问用户,反之亦然。 而且由于这是一种使用节点的独特方式(还没有找到其他使用它的人),我无法弄清楚......
我错过了什么? 提前致谢!
编辑 1:
根据 cmets 的要求,我将getUsers 方法留在这里:
exports.getUsers = async (req, res, next) => {
try {
await new Promise(async (resolved, rejected) => {
let conn;
try {
conn = await db.pool.getConnection();
const result = await conn.query(`
SELECT * FROM users
`)
.then((resp) => {
if (!resp.length) {
res
.status(200)
.json({ success: true, message: general.noResults });
resolved(resp);
return;
}
const data = resp;
res
.status(200)
.json({ success: true, utilizadores: data });
resolved(resp);
})
.catch ((err) => {
if (mode() === 'development' || mode() === 'test') console.log(`Error: ${ err }.`);
res
.status(400)
.json({ success: true, message: general.badRequest });
rejected(err);
})
} catch (err) {
if (mode() === 'development' || mode() === 'test') console.log(`Error: ${ err }`);
res
.status(400)
.json({ success: false, message: general.badRequest });
rejected(err);
} finally {
if (conn) {
conn.end();
}
}
})
.then((message) => {
if (mode() === 'development' || mode() === 'test') console.log(message);
})
.catch((err) => {
if (mode() === 'development' || mode() === 'test') console.log(err);
});
} catch (err) {
if (mode() === 'development' || mode() === 'test') console.log(`Error: ${ err }.`);
res
.status(400)
.json({ success: false, message: general.badRequest });
}
}
【问题讨论】:
标签: javascript node.js api express routes