Промежуточное программное обеспечение Nuxt — сервера не работает в рабочей среде

#javascript #nuxt.js

Вопрос:

Я создал приложение с помощью Nuxt и создал простое серверное промежуточное программное обеспечение для обработки отправки электронной почты. Все работает над разработкой, но на производстве у меня ошибка 404 с этой конечной точки. Кто-нибудь знает, как включить промежуточное программное обеспечение сервера в файлы сборки или любым другим способом?

серверное промежуточное программное обеспечение:

 const bodyParser = require('body-parser')
const app = require('express')()

app.use(bodyParser.json())

app.post('/', (req, res) => {
// Some code here
})

module.exports = app
 

Nuxt.config.js

 serverMiddleware: [
    { path: '/contact/send', handler: '~/server-middleware/email.js' }
  ],
 

Ответ здесь:
введите описание изображения здесь

Комментарии:

1. Вы используете свое приложение только как статическое или тоже с SSR ?

2. Я создал свое приложение с помощью SSR

3. По — моему, все в порядке. Вы не забыли какую-нибудь переменную env или что-то подобное ? Я имею в виду, вы уверены, что проблема исходит отсюда ? Кроме того, установлены ли ваши пакеты, используемые в промежуточном программном обеспечении, как dependencies и не только devDependecies ?

4. Да, я не вижу никакой строки «связаться/отправить» в папке сборки :/ Я вижу, что это не существует, в папке сборки не создается :/ Я получаю 404, что правильно, потому что его там нет :/

5. Кстати, где размещено ваше приложение? Вы уверены, что у него есть сервер узлов для SSR?

Ответ №1:

Я нашел ответ на вопрос github о репо nuxt:

Это правильно — серверное промежуточное программное обеспечение не компилируется и не является частью сборки вашего веб-пакета, поэтому вам следует обязательно скопировать их отдельно в производство. (А также убедитесь, что все зависимости, которые у них есть, установлены в рабочей среде.)

(Обратите внимание, что это изменится с Nuxt 3 — у вас будет один встроенный сервер, включающий промежуточное программное обеспечение вашего сервера.)

Проблема здесь: https://github.com/nuxt/nuxt.js/issues/9158#issuecomment-820676790

Ответ №2:

Это решение, похоже, работает: https://github.com/nuxt/nuxt.js/issues/1486#issuecomment-325181524

 // nuxt.config.js
serverMiddleware: [
  '~/api/index.js',
]
 
 // api/index.js
const app = require('express')()
module.exports = { path: '/api', handler: app }

app.get('/say/:word', (req, res) => {
  res.json(req.params)
})
 

Комментарии:

1. На dev работает, но это работало, но на производстве я все еще получаю 404 :/

2. Я написал некоторую конечную точку get «/test», и после сборки я не вижу никакой строки, подобной «/test» или «test», она не создается

3. Да, кажется законным, что этот тоже глючит. Никогда не работал с serverMiddleware этим , это кажется немного сложным.

4. Спасибо, что уделили мне время @kissu