Разница между передачей функции и () => {} в express - PullRequest
1 голос
/ 04 апреля 2020

В чем разница между этими двумя? Только (1) работает и (2) застревает в браузере;

(1) app.get('/source*', createProxyMiddleware({ target: serviceProvider}))

(2) app.get('/source*', () => { createProxyMiddleware({ target: serviceProvider}) })

Ответы [ 5 ]

2 голосов
/ 04 апреля 2020
createProxyMiddleware({ target: serviceProvider})

возвращает функцию, которую еще предстоит выполнить с параметрами из express промежуточного программного обеспечения. чтобы второй пример заработал, вам просто нужно выполнить возвращаемую функцию следующим образом:

2) app.get('/source*', (req, res, next) => {
  const func = createProxyMiddleware({ target: serviceProvider});
  func(req, res, next);
})
1 голос
/ 04 апреля 2020

в опции (2) вы поместили createProxyMiddleware({ target: serviceProvider}) ВНУТРИ функцию, которая не обрабатывает запрос и не возвращает метод, который делает.

() => {} - это сокращение для записи:

function () {}

, поэтому по сути код в опции (2) такой же, как:

app.get('/source*', function () {
  createProxyMiddleware({ target: serviceProvider})
});

и в основном ваша собственная функция заняла место рендера.

Я еще не пробовал, но подумайте над попыткой вернуть createProxyMiddleware({ target: serviceProvider}) из вашей функции.

Пример:

app.get('/source*',  () =>  {
  // do here whatever you planned on doing inside your function before returning the renderer 

  return createProxyMiddleware({ target: serviceProvider});
});


0 голосов
/ 04 апреля 2020

Давайте на секунду предположим, что функция createProxyMiddelware возвращает значение "привет". Тогда мы могли бы переписать ваши два scnear ios так:

1. app.get('/source*', "hello")
2. app.get('/source*', () => "hello")

Так что вы можете увидеть разницу сейчас. В первом сценарии вы оцениваете функцию createProxyMiddleware. Во втором случае второй аргумент является функцией обратного вызова, которая при вызове вызовет функцию createProxyMiddelware

0 голосов
/ 04 апреля 2020

Этот второй аргумент для get должен соответствовать сигнатуре аргумента (request, response, next), которая является сигнатурой для любого промежуточного программного обеспечения в express, включая контроллер конечной точки. https://expressjs.com/en/guide/using-middleware.html

1 создает правильную стандартную функцию промежуточного программного обеспечения.

2 ничего не возвращает, ничего не возвращает в ответе и не вызывает «next ()» для перехода к промежуточному программному обеспечению следующего запроса.

Надеюсь, это поможет. Я отвечаю с моего телефона.

0 голосов
/ 04 апреля 2020

попробуй:

app.get('/source*', (req,res,next) => {
  try {
    createProxyMiddleware({ target: serviceProvider})
  }
  catch(error) {
    next(error)
}
})
...