Tag: 路由器

app.get起作用,app.use不起作用

这是如何工作的: app.get(/\/new\/(.*)/, function (req, res) { console.log(req.params[0]); res.json({site: req.params[0]}); }); 但如果我使用app.use() ,相同的代码将不会。 const app = require("express")(); const error = require("./routes/error"); app.use(/\/new\/(.*)/,error); error.js const express = require("express"); const router = express.Router(); router.get("/",function(req,res){ console.log(req.params[0]) res.json({site:req.params[0]}) }); module.exports = router; 在这种情况下,它只是将未定义的日志logging到控制台,但在第一种情况下,它将返回“新”路由后input的所有内容。

如何使用Express和Node仅在POST上添加中间件

我有一个中间件,只有在http方法发布后才能应用。 以下工作正常,但我觉得有一个更好的办法: 'use strict' const express = require('express'), router = express.Router() router.use((req, res, next) => { if (req.method === 'POST') { // do stuff } return next() }) module.exports = router 我想要做这样的事情,但它不起作用: 'use strict' const express = require('express'), router = express.Router() router.post((req, res, next) => { // do stuff return next() }) module.exports = router

在路由中使用RE和命名时,'0'项目

我试图拆分下面的URL(他们是没有限制的子查询): www.zookeeper.com/api/zoo/monkey/1/feed 成: { "Main": "zoo", "Sub": "/monkey/1/feed" } 在下面的代码中, SUB_REQUEST字段中总是缺less最后一个字符。 router.get("/:BASE_REQUEST/*:SUB_REQUEST",function(req,res) { res.json( { "Main":req.params.BASE_REQUEST, "Sub":req.params.SUB_REQUEST+req.params[0]//append last char hack! }); }); 如果你看看req.params,总会有一个神秘的'0'。 { '0': 'd', BASE_REQUEST: 'zoo', SUB_REQUEST: '/monkey/1/fee' } 有人可以解释这种行为吗? 这个'0'来自哪里? 我正在使用快速版本4.12.4

Node.js表示:迷惑路由器中间件

没有路由器中间件,一旦服务器端收到发布数据,就可以正常login: var express = require('express'); var app = express.createServer(); app.configure(function () { app.use(express.static(__dirname + '/static')); // app.use(app.router); app.use(express.bodyParser()); }) app.get('/', function(req, res){ res.send('Hello World'); }); app.post('/', function(req, res){ console.log('body:', req.body); res.send(req.body); }); app.listen(8000); 但是一旦我使用router中间件,日志结果是undefined ,什么也不回应 为什么? 我怎么解决这个问题?

ExpressJS>路由器中间件>通过redirect传递variablesreq.foo不工作

比方说,我有这个: a)每条路由具有1个中间件函数和一个callback函数: router.post('/foo', fooCtrl, function(req, res) { res.redirect('/bar'); }); router.get('/bar', barCtrl, function(req, res) { res.end('finished'); }); b)2个中间件函数expression式 fooCtrl = function(req, res, next) { req.foo = 'foo'; next(); }; barCtrl = function(req, res, next) { console.log(req.foo); // output is 'undefined' next(); }; 正如你所看到的,在fooCtrl中我设置了一个variablesreq.foo – 在这个范围内它被设置为…但是我不能在barCtrl范围内调用这个variables。 是不是通过引用传递的req对象? 任何build议或最佳做法? 这样做的目的是从login控制器login后,将令牌传递给pipe理员控制器..类似的东西。

ExpressJS 4中间件问题

我试图用ExpressJS 4把我的头围绕在中间件上。 如果我正确理解的是,中间件是按照声明的顺序来应用的,你可以在不同的层次上“绑定”它们。 在这里,我试图在路由器级绑定一个中间件。 function middleware(req, res, next) { console.log("middleware"); res.write("middleware"); next(); } function handler(req, res) { console.log("OK"); res.status(200).send('OK'); } const router1 = express.Router(); const router2 = express.Router(); router1.get("/1", handler); router2.get("/2", handler); 除了在/test/1和/test/2上调用/test/1时打印OK 。 app.use("/test/", router2.use(middleware), router1); 但是输出似乎是倒置的,相当于: app.use("/test/", router2, middleware, router1); 我真正想要的只是第一台使用中间件的路由器。 换句话说,将中间件用于第一个控制器。 我可以很容易地交换router1和router2的顺序,但是我的其他要求是因为我的router2实际上使用了一个能够捕获所有请求( /:id )的路由,我需要最后一个。 我在这里错过了什么,我该怎么做我想要的? 编辑澄清: 我最终想要的是这样的东西: / |-test/ |-route // use […]

router.use TypeError:无法读取未定义的属性'use'

我是node.js的新手,请高手帮忙。 我在准备一个基于node.js + AWS Cognito + Facebooklogin的用户同步代码。 我从这个链接尝试了一个例子。 每一步都运行顺利,直到“facebook带护照”部分 var express = require('express'); var router = express.Router(); var passport = require('passport'); … router.use(passport.initialize()); … 在这个例子中添加这个部分后,我运行“npm start”,出现如下错误: C:\workspace\nodejs\CognitoExample\routes\index.js:35 router.use(passport.initialize()); ^ TypeError: Cannot read property 'use' of undefined “不能读取财产”的含义是什么? 如何解决这个问题? 预先感谢。 在这里less有专家帮忙之后,我可以解决这个问题: 重新安装快递 我昨天使用了npm install -g express-generator @ 3命令,所以它使我的全局设置expression了版本3.我首先卸载并安装express。 npm uninstall -g express-generator@3 npm uninstall -g express […]

Node.js模块特有的静态资源

有没有一个优雅的方式来捆绑静态客户端文件资源(脚本,图像等)到一个Express模块​​,并系统地避免命名冲突? 注册一个特定于模块的静态对象实例是很简单的,就像这样: app.use(express.static(modulePath + '/public')); app.use(express.static(__dirname + '/public')); 但是如果两个目录都包含一个“styles.css”文件,那么看起来模块中的一个会隐藏应用程序的一个。 模块公共内部的一个子目录可以用来避免这个问题,但我真正想要的是一种将模块资源映射到任意path的方法, http://localhost:3000/mymodule/styles.css => <modulePath>/public/styles.css http://localhost:3000/styles.css => <appPath>/public/styles.css 有没有办法做到这一点? 我已经完成了编码技巧,所以我真的在寻找推荐的方法来完成它。 另外,如果我错过了一些完全不必要的关键概念,我也想了解一下。

如何知道路由器的快速安装path?

我在Web应用程序上使用快速路由器 。 我以通常的方式添加路由器: app.use(router, '/myroutehere/'); 每个路由器的处理程序都不知道它们在哪里“安装”(不同的文件,不同的问题等)。 直到现在,这一直工作正常,我需要为其中一个路由器创build一个ToC(并且内容是dynamic生成的)。 我正在使用url.resolve来处理相对path,但我遗漏了url的初始部分(否则链接将parsing为/而不是/myrouter/ )。 有没有办法知道路由器的安装path,而不是在不同的地方硬编码? router.get('/', function(req, res){ // Need to know the mount path here or a way to resolve relative links // to the mount path and make them absolute to the app });

正确/最简单的方法来嵌套路由器与Express

我可以设置两条这样的路线 index.js var express = require('express'); var app = express(); var router = express.Router(); const PORT = 3001; app.get('/', function(req, res){ res.send('hello app'); }); app.use('/routes', require('./routes')); app.listen(PORT, function(){ console.log('listening on port:', PORT); }); ./routes/index.js var express = require('express'); var app = express(); var router = express.Router(); router.use('/sub1', require('./sub1')); router.use('/sub2', require('./sub2')); module.exports = router; ./routes/sub1.js var […]