Поместить пользовательское промежуточное ПО последним в цепочку на пользовательский сервер next.js? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь добавить пользовательское промежуточное ПО на пользовательский сервер next.js .Но нет никаких конкретных шаблонов пути, к которым я мог бы привязать свое промежуточное программное обеспечение, так как эти URL генерируются нашей CMS и могут быть в значительной степени чем угодно, а все .Поэтому я хотел бы добавить свое промежуточное ПО последним в цепочке так сказать.В качестве окончательного всеобъемлющего.Но я не могу найти никакой документации о том, как этого добиться.

Я пытался просто поставить свое промежуточное ПО последним, но это привело к тому, что его никогда не вызывали.

Работает, но уродливо, ине в будущем:

//Our custom middleware first
server.get('*', [customMiddleware, standardMiddleware])
...
const customMiddleware = async function (req, res, next) {
  const parsedUrl = parse(req.url, true)
  const { pathname, query } = parsedUrl
  console.log("Custom middleware. pathname: " + pathname)
  if (pathname.startsWith("/babel/") || pathname.startsWith("/_next/") || pathname.startsWith("/static/") ...etc) {
    return next()
  }
  ///Custom logic here...
}

const standardMiddleware = function (req, res, next) {
  const parsedUrl = parse(req.url, true)
  const { pathname, query } = parsedUrl
  console.log("Standard middleware. pathname: " + pathname)
  return handle(req, res)
}

Не работает:

//Our custom middleware last
server.get('*', [standardMiddleware, customMiddleware])
...
const standardMiddleware = function (req, res, next) {
  const parsedUrl = parse(req.url, true)
  const { pathname, query } = parsedUrl
  console.log("Standard middleware. pathname: " + pathname)
  return handle(req, res)
}

const customMiddleware = async function (req, res, next) {
  const parsedUrl = parse(req.url, true)
  const { pathname, query } = parsedUrl
  console.log("Custom middleware. pathname: " + pathname)
  ///Custom logic here...
}

Когда я запускаю код, отмеченный «Не работает» Я ожидал, что next.js обработает все запросычто он может обработать, а затем вернуться к customMiddleware для всех других запросов.На самом деле происходит то, что он никогда не возвращается к customMiddleware , он просто возвращает 404 для неизвестных путей.

Обновление 2019-02-13

Поскольку это не представляется возможным в текущем коде NextJS, я добавил это как запрос функции .

1 Ответ

0 голосов
/ 12 февраля 2019

Чтобы проиллюстрировать мой комментарий выше:

const standardMiddleware = function (req, res, next) { // next is a callback argument here
  const parsedUrl = parse(req.url, true)
  const { pathname, query } = parsedUrl
  console.log("Standard middleware. pathname: " + pathname)
  return handle(req, res, next); // pass it along
}
...
function handle(req, res, next) {
  ...
  if (noRouteEventuallyMatched) {
    // res.status(404).sendFile('/path/to/my404.html');
    next(); // instead of setting res, call next so that the next element in the chain is tried
  }
}
...