我还在尝试学习NodeJ,但是我遇到了在Express中遇到的这条路径。当我使用Express创建应用时,我发现在 app.js 中我有这些代码行var index = require('./routes/index');
var users = require('./routes/users');
app.use('/', index);
app.use('/users', users);
在 users.js 中,我已经配置了
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
module.exports = router;
我真的不明白为什么在app.js中指定的users.js router.get('/')
而不是router.get('/users')
?有人可以解释一下这种情况下发生了什么吗?
据我所知,在app.js中,只要有人试图访问指定的路径('/users'
),就可以在浏览器中说localhost:3000/users
,让用户变量中的文件处理它。
答案 0 :(得分:1)
如果您正在使用路线,快递应用程序将自动进行。以下是express.js网站的一个例子:
在我们的路由器文件中,我们有:
var express = require('express')
var router = express.Router()
// middleware that is specific to this router
router.use(function timeLog (req, res, next) {
console.log('Time: ', Date.now())
next()
})
// define the home page route
router.get('/', function (req, res) {
res.send('Birds home page')
})
// define the about route
router.get('/about', function (req, res) {
res.send('About birds')
})
module.exports = router
然后在我们的主文件中,我们将服务器等加载到路由器中:
var birds = require('./birds')
// ...
app.use('/birds', birds)
路由器应用中的这些路由仅在有/birds
网址请求时才会被访问。路由器中的所有路由现在都会自动盯着/birds
所以这个代码在快递路由器中:
// im code in the birds router
router.get('/about', function (req, res) {
res.send('About birds')
})
仅在有人向/birds/about
网址发出请求时执行。
答案 1 :(得分:1)
我想指出一些沮丧之后我今天学到的东西,也许有人可以详细说明为什么会这样。无论如何,如果像我一样,你想对所有用户路由使用'/ users',或者对所有管理员路由使用'/ admin',那么,如上所述WillemvanderVeen,你需要将以下代码添加到你的主app.js文件< / p>
var users = require('./routes/users')
app.use('/users', users)
但是,未提及的一件事是您在 app.js 中声明'app.use('/ users',users)'的顺序非常重要。例如,您将有两个路由处理文件:
<强> /routes/index.js 强>
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => { res.render('index') });
<强> /routes/users.js 强>
const express = require('express'); const router = express.Router();
router.get('/', (req, res) => { res.send('users route') })
然后您将在主 app.js 文件中要求它们:
<强> app.js 强>
const express = require('express');
const app = express();
const index = require('./routes/index');
const users = require('./routes/users');
app.use('/', index);
app.use('/users', users);
并且当您点击'/ users'路线时,您会看到您会收到res.send('users route')
页。
这对我不起作用,直到最近我才努力寻找任何解决方案,这就是为什么我现在正在评论帮助你。
相反,我在app.use()
周围交换app.js
声明就像这样,它起作用了:
<强> app.js 强>
const express = require('express');
const app = express();
const index = require('./routes/index');
const users = require('./routes/users');
app.use('/users', users);
app.use('/', index);
现在,当我点击'/ users'时,我会看到'users route'消息。希望这有帮助。
回答你的问题,当你在app.js中配置路由处理程序作为用户时,你需要一个路由器文件(./routes/users)来处理来自该文件的所有请求并将它们发送到URL /用户第一。因此,如果您执行以下操作:
<强> /routes/users.js 强>
router.get('/dashboard', (req, res) => {
// get user data based on id and render it
res.render('dashboard')
});
然后,只要用户登录并转到仪表板,该URL就是/ users / dashboard。