node.js - уроки - middleware js




Node.js/Express.js-Как работает app.router? (2)

Прежде чем спросить о app.router я думаю, что я должен объяснить, по крайней мере, то, что, как мне кажется, происходит при работе с промежуточным программным обеспечением. Для использования промежуточного программного обеспечения используется функция app.use() . Когда промежуточное программное обеспечение выполняется, оно будет либо вызывать следующее промежуточное программное обеспечение, используя next() либо сделать так, чтобы больше не вызывалось промежуточное программное обеспечение. Это означает, что порядок, в котором я размещаю свои вызовы промежуточного программного обеспечения, важен, поскольку некоторое промежуточное программное обеспечение зависит от другого промежуточного программного обеспечения, и некоторое промежуточное программное обеспечение рядом с ним может даже не вызываться.

Сегодня я работал над своим приложением и работал в фоновом режиме. Я хотел внести некоторые изменения и обновить свою страницу и сразу увидеть изменения. В частности, я вносил изменения в свой макет. Я не мог заставить его работать, поэтому я искал Stack Overflow для ответа и нашел этот вопрос . Он говорит, чтобы убедиться, что express.static() ниже require('stylus') . Но когда я смотрел на этот код OP, я увидел, что у него был свой вызов app.router в самом конце его вызовов промежуточного программного обеспечения, и я попытался понять, почему это было.

Когда я сделал приложение Express.js (версия 3.0.0rc4), я использовал команду express app --sessions --css stylus а в моем файле app.js был установлен код с моим app.router выше как express.static() и require('stylus') вызовов. Так кажется, что если он уже настроен таким образом, тогда он должен оставаться таким.

После переустановки моего кода, чтобы я мог видеть мои изменения в Stylus, он выглядит так:

app.configure(function(){
  //app.set() calls
  //app.use() calls
  //...
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(__dirname + '/public', {maxAge: 31557600000}));
});

app.get('/', routes.index);

app.get('/test', function(req, res){
  res.send('Test');
});

Поэтому я решил, что первым шагом будет выяснить, почему важно иметь app.router в моем коде. Поэтому я прокомментировал это, начал свое приложение и перешел к / . Он показал мою индексную страницу просто отлично. Хм, возможно, это сработало, потому что я экспортировал маршрутизацию из файла маршрутов (routes.index). Итак, в следующий раз я перешел в /test и он отобразил Test на экране. Ха-ха, хорошо, я понятия не имею, что делает app.router . Включен ли он в мой код или нет, моя маршрутизация в порядке. Поэтому я определенно чего-то не хватает.

Вот мой вопрос:

Может ли кто-нибудь объяснить, что делает app.router , важность этого и где я должен поместить его в свои вызовы промежуточного программного обеспечения? Было бы неплохо, если бы я получил краткое объяснение о express.static() . Насколько я могу судить, express.static() - это кеш моей информации, и если приложение не может найти запрошенную страницу, оно проверит кеш, чтобы узнать, существует ли он.


Маршрутизация означает определение того, как приложение реагирует на запрос клиента на конкретную конечную точку, которая представляет собой URI (или путь) и конкретный метод HTTP-запроса (GET, POST и т. Д.). Каждый маршрут может иметь одну или несколько функций обработчика, которые выполняются, когда маршрут согласован.

В Express 4.0 Router нам предоставляется больше гибкости, чем когда-либо прежде, при определении наших маршрутов.

express.Router () используется несколько раз для определения групп маршрутов.

маршрут, используемый в качестве промежуточного программного обеспечения для обработки запросов.

маршрут используется в качестве промежуточного программного обеспечения для проверки параметров с помощью «.param ()».

app.route () используется как ярлык для маршрутизатора для определения нескольких запросов на маршруте

когда мы используем app.route (), мы присоединяем наше приложение к этому маршрутизатору.

var express = require('express'); //used as middleware
var app = express(); //instance of express.
app.use(app.router);
app.use(express.static(__dirname + '/public')); //All Static like [css,js,images] files are coming from public folder
app.set('views',__dirname + '/views'); //To set Views
app.set('view engine', 'ejs'); //sets View-Engine as ejs
app.engine('html', require('ejs').renderFile); //actually rendering HTML files through EJS. 
app.get('/', function (req, res) {
  res.render('index');  
})
app.get('/test', function (req, res) {
  res.send('test')
})

В экспресс-версии 4 мы можем легко определить маршруты следующим образом:

server.js:

const express = require('express');
const app = express();
const route = require('./route');

app.use('/route', route);
// here we pass in the imported route object

app.listen(3000, () => console.log('Example app listening on port 3000!'));

route.js:

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

router.get('/specialRoute', function (req, res, next) {
     // route is now http://localhost:3000/route/specialRoute
});

router.get('/', function (req, res, next) {
    // route is now http://localhost:3000/route
});

module.exports = router;

В server.js мы импортировали объект route.js файла route.js и применяем его следующим образом в server.js :

app.use('/route', route);

Теперь все маршруты в route.js имеют следующий базовый URL:

http://localhost:3000/route

Почему такой подход:

Основным преимуществом такого подхода является то, что теперь наше приложение является более модульным . Теперь все обработчики маршрутов для определенного маршрута могут быть помещены в разные файлы, что делает все более удобным и удобным для поиска.





express