【问题标题】:app.get() is not working. related to Difference between app.use and app.get in express.jsapp.get() 不工作。与 express.js 中 app.use 和 app.get 之间的区别有关
【发布时间】:2019-02-14 00:12:21
【问题描述】:
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));


app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;

我创建了快速生成器。然后我尝试更改app.use('/', indexRouter)app.get('/', indexRouter)app.use('/users', usersRouter)app.get('/users', usersRouter)

然后app.get('/', indexRouter) 工作(可以点击 URL 并获取页面信息)。但是app.get('/users', usersRouter) 没有工作。这返回 404 (NotFoundError: Not Found)。

这个问题我已经看了Difference between app.use and app.get in express.js 但是我看不懂

./routes/index.js

 var express = require('express');
 var router = express.Router();

 /* GET home page. */
 router.get('/', function(req, res, next) {
   res.render('index', { title: 'Express' });
 });

 module.exports = router;

./routes/users

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.get 不应与路由器一起使用,因为路由器可能有多个使用不同动词的路由。

标签: javascript node.js express


【解决方案1】:

app.use 是为中间件设计的,app.get 是为 GET 请求设计的。中间件是在控制器之前调用的函数。您可能有一个中间件来检查用户是否通过身份验证,并接受或拒绝用户的请求。

当您拥有app.use('/', indexRouter) 时,将为您在所有路线上的所有请求调用indexRouter。就像/*

当您拥有app.use('/users', usersRouter) 时,将为您在以/users 开头的所有路由上的所有请求调用usersRouter。就像/users*

这是您可以执行 GET 请求的方式:

app.get('/users', (req, res) => res.status(200).send({
  message: 'It works.',
}));

【讨论】:

  • 为什么只有“app.get('/users', usersRouter)”不起作用?
  • 你应该传递一个函数给app.get,比如:app.get('/users', getUsers)
  • 我已经更新了答案,并在 /users 路由上包含了一个有效的 GET 请求
  • 当您配置app.get 时,您应该传递一个路由和一个在通过 GET 访问该路由时要调用的函数。从答案中复制app.get 并尝试一下。
  • 我从你的回答中试过了。它有效 但是为什么app.get('/', indexRouter) 有效? indexRouter 也不起作用
猜你喜欢
  • 2013-03-14
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 2017-06-09
  • 2017-08-20
相关资源
最近更新 更多