- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我使用的路由设置使用我的“api”文件夹的目录结构来直观地设置路由。但是,在我使用文件夹名称表示路由参数的情况下,req.params 在 Controller 中未定义。
有问题的路由是:
GET /api/google/accounts/:account_id/analytics/profiles/
这是我的路线加载器。它基本上在 api 文件夹上执行 glob 查找名为 routes.js
的文件,并在适当的路径上执行 app.use
(由文件夹结构确定)。
// load routers
files = glob.sync("api/**/routes.js");
console.log(files);
// [ 'api/campaigns/routes.js',
// 'api/google/accounts/:account_id/analytics/profiles/routes.js',
// 'api/google/accounts/routes.js',
// 'api/google/urls/routes.js',
// 'api/users/routes.js' ]
// use each router on the appropriate route
for(var i=0;i<files.length;i++) {
route = "/" + files[i].split("/routes.js")[0];
console.log(route);
// '/api/google/accounts/:account_id/analytics/profiles'
router = require(path.join(__dirname, files[i]))(config);
routes = router.stack;
app.use(route, router);
// list all registered routes for this router
for(var j=0;j<routes.length;j++) {
routeDebug((" " + Object.keys(routes[j].route.methods)[0].toUpperCase()).slice(-6) + " " + route + routes[j].route.path);
}
}
“api”文件夹结构是:
./api
./api/campaigns
./api/campaigns/controller.js
./api/campaigns/model.js
./api/campaigns/routes.js
./api/users
./api/users/controller.js
./api/users/model.js
./api/users/routes.js
./api/google
./api/google/accounts
./api/google/accounts/:account_id
./api/google/accounts/:account_id/analytics
./api/google/accounts/:account_id/analytics/profiles
./api/google/accounts/:account_id/analytics/profiles/controller.js
./api/google/accounts/:account_id/analytics/profiles/routes.js
./api/google/accounts/controller.js
./api/google/accounts/model.js
./api/google/accounts/routes.js
./api/google/urls
./api/google/urls/controller.js
./api/google/urls/routes.js
在上面的循环中,routeDebug 是调试 npm 包的包装器。输出是:
routes GET /api/campaigns/ +0ms
routes POST /api/campaigns/ +2ms
routes GET /api/campaigns/:campaign_id +1ms
routes PUT /api/campaigns/:campaign_id +0ms
routes DELETE /api/campaigns/:campaign_id +0ms
routes GET /api/google/accounts/:account_id/analytics/profiles/ +128ms
routes GET /api/google/accounts/ +4ms
routes POST /api/google/accounts/ +0ms
routes POST /api/google/urls/ +3ms
routes GET /api/users/ +12ms
routes POST /api/users/ +0ms
routes GET /api/users/:user_id +0ms
routes PUT /api/users/:user_id +0ms
routes DELETE /api/users/:user_id +0ms
因此我们可以看到所讨论的路由正在按预期设置。但是 req.params 是未定义的。其他路由没有这个问题。
为什么只有这条特定路线的 req.params 是空的?有没有比使用文件夹作为路由参数更好的方法来构建这些嵌套路由?
编辑:我预计问题源于嵌套路由器无法访问父路由器的参数。
Rest with Express.js nested router
但是,按照建议设置子路由器也无济于事。
var router = require("express").Router({mergeParams: true});
// no difference
最佳答案
原来是mergeParams was not added to Express until 4.5.0 ;我的项目还在 4.2.0 上。更新到 4.5.0 并将 {mergeParams: true}
传递给子路由器解决了这个问题。有关详细信息,请参阅此类似问题:
关于javascript - 嵌套路由器中的 ExpressJS req.params 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29102672/
基于此答案的问题:https://stackoverflow.com/a/18650183/4478897 我试图找到这个解决方案,但似乎没有任何效果符合我的需要。 集群 expressjs 和 so
我有一个使用 Sequelize.js 作为 ORM 运行的快速应用程序。我的 express 应用程序从我的主要 Rails 应用程序接收请求,并且由于跨域策略,这些请求是使用 getJSON 执行
如何处理同步错误并保证在同一代码中出现错误? 这是我的代码,但不确定其工作正常,有什么想法吗? helpers.list({ limit: 1 })
在我的 ExpressJS 代码中,我限制主体大小如下: app.use(bodyParser.urlencoded({ limit : "512kb", extended: fals
我有一个看起来像这样的对象: editinvite: { _id: '', title: '', codes_list: [] } 问题是我无法在 NodeJS 应用程序中访问codes_
我正在尝试让我的nodeapp 使用express 工作。 我已经通过 nginx 设置了反向代理以使用 https://dank.ml/api/v1但每当我启动我的应用程序时,它都不想检测 / 响应
我完全失去了理智: 我有一个快速应用程序:以下是此示例的几个文件的快照: 应用程序.js -模型 --Event.js --Match.js 路线 --matches.js app.js: globa
我有我的nodejs项目,我想将记录器与我的route.js分开以获得干净的代码。 但是我遇到了下一个问题,当我尝试将记录器加载到route.js 文件时,它会显示下一个错误: TypeError:
我在 MEAN 应用程序中的模板缓存方面遇到一些困难。我有一个导航栏,它使用条件逻辑来显示/隐藏向用户显示的按钮。当用户点击页面时,这些值将被设置为 null 或 false,但是一旦他们登录,这些值
是否可以根据可选路线创建不同的查询? app.get('/:genre/:book?', function (req, res) { var genre = req.params.genre; v
我正在尝试学习 ExpressJS,并且遇到了这段代码。我似乎无法理解 app.use 函数,并且文档对我来说也不清楚。当调用 app.use 时,此特定示例代码中的/public 目录到底发生了什么
我正在开发一个学校管理系统。当老师发送发布请求时,我在后端创建一个路由内的全局对象。所以当多个老师访问服务器时,会创建多个全局对象......或者每个老师访问同一个对象?(会被重写同一个对象吗?) 最
我有一个用 typescript 编写的小型微服务,在 AKS 上的 kubernetes 集群中运行。我使用 Helm 生成了入口 apiVersion: extensions/v1beta1 ki
我需要将 JSON 发送到我的服务器,但 POST 请求显示为空正文。这是我在前端的 typescript : function sendData() : void { console.log("Se
这是我的 app.js import path from 'path'; import bodyParser from 'body-parser'; import express from 'expr
我一直在使用 ExpressJS 来促进文件上传,但据我所知,您可以将文件上传到任何路由,无论它是否处理它。 说我有 app.post('/photos/upload', photos.upload)
我正在阅读 Express.JS 4.x API,并且很好奇他们是如何设置的。这是我对正在发生的事情的理解:在 Express.JS 4.x API 的示例代码中,express 模块被导入并分配给变
我有以下注册页面 form(method='post', action='users/register') .form-group label Name inp
我有诸如 :id/comments/、:id/otherRoute 等路线。对于这些路线,我需要创建新的 Controller 。例如: let id: number = +req.params["i
嘿,我有一个使用 Express.js 和 Handlebars 运行的网站,该网站的导航栏和侧边栏在所有页面上都保持相同。当我路由时,它仅更改页面容器 {{{body}}}。 有没有一种方法可以让我
我是一名优秀的程序员,十分优秀!