我目前正在使用Node.js和Express.js构建一个REST API,并且我对这项技术非常陌生。下面的代码显示了存储在MongoDB中的委员会列表的get方法。
const { Council } = require('../mongoose-models/council');
const express = require('express');
const router = express.Router();
router.get('/', async (req, res) => {
const query = req.query;
const councilsList = await Council.find(query);
if (!councilsList) return res.status(404).send('No councils found.');
res.send(councilsList);
});
module.exports = router; 根据我以前使用java开发REST API的经验,我可以通过实现具有不同路径的不同方法来定制不同的查询。例如:
@Path("findByCouncilName/{councilName}")@Path("findCouncilsNotInMyArea/{longitude}/{latitude}")在每个方法中,我可以编写不同的逻辑。然而,在Express.js中,似乎我必须在一个块中实现所有这些不同的逻辑。它看起来不灵活,怎么才能真正实现呢?此外,查询是否必须与MongoDB中的键名相同?如果我想根据文档中嵌套数组中指定的index元素来过滤结果,该怎么办?
发布于 2019-08-21 18:33:52
对于您的路由:
@Path("findByCouncilName/{councilName}") @Path("findCouncilsNotInMyArea/{longitude}/{latitude}")
如果你要在express中实现它们,你实际上可以把它们分成不同的块。
您可以尝试这样做,而不是听'/'并尝试处理内部的所有事情。
const express = require('express');
const router = express.Router();
router.get('/findByCouncilName/:councilName', async (req, res) => {
const councilName = req.params.councilName;
// Your logic goes here
res.send();
});
router.get('/findCouncilsNotInMyArea/:longitude/:latitude', async (req, res) => {
const longitude = req.params.longitude;
const latitude = req.params.latitude;
// Your logic goes here
res.send();
});
module.exports = router; 发布于 2019-08-21 18:23:15
你可以像这样使用它:
router.get('/:councilName', async (req, res) => {然后使用路由中的参数:
req.params.councilName发布于 2019-08-21 18:36:41
Express文档是您的朋友
https://expressjs.com/en/guide/routing.html
以下是您应该了解的关于快速路由的所有内容。您可以为每个pat-method对指定单独的逻辑,并根据需要再次使用通用逻辑。
你需要知道Express解析它们的路径顺序,例如。将执行第一个要匹配的路径。
https://stackoverflow.com/questions/57589334
复制相似问题