Nodejs在users.js中表达router.get(' /')

时间:2018-02-24 10:28:41

标签: node.js express routes

我还在尝试学习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,让用户变量中的文件处理它。

2 个答案:

答案 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网址发出请求时执行。

the official express.js docs

中的更多信息

答案 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。