Почему мой собственный сервер Nextjs не работает в моем развертывании Vercel?

Привет, у меня есть репозиторий для тестирования. В localhost я могу видеть, когда я выполняю npm run dev, мой пользовательский сервер .... server.js в корневом каталоге выполняет перенаправление, если существует мой пользовательский файл cookie. Но в производстве в Vercel я не вижу, что этот настраиваемый сервер работает (я вижу, потому что в Server.js я добавляю файл cookie сеанса с именем n-session со значением 1, но в производстве не работает (также журналы в Server.js не не отображать эту трассировку в Server.js).

В моем package.json я вижу:

    "scripts": {
        "dev": "node server.js",
        "build": "next build",
        "start": "NODE_ENV=production node server.js",
        "export": "next export",
      },

У моего server.js есть этот код:

    // server.js
    const { createServer } = require('http')
    const { parse } = require('url')
    const next = require('next')
    
    const app = next({})
    const handle = app.getRequestHandler()
    
    var Cookies = require('cookies');
    
    const { localeLanguages } = require('next/config').default().publicRuntimeConfig;
    
    app.prepare().then(() => {
      createServer((req, res) => {
        // Be sure to pass `true` as the second argument to `url.parse`.
        // This tells it to parse the query portion of the URL.
        const parsedUrl = parse(req.url, true);
        const { pathname } = parsedUrl;
    
        console.log("pathname", pathname)
        if (pathname === '/') {
          console.log("pathname is root..................")
          const mainLang = process.env.NEXT_PUBLIC_MAIN_LANG;  
    
          let uriRedirect = null;
    
          if (req && req.headers) 
          {
            console.log("req.headers", req.headers)
            const cookies = new Cookies(req, res);
        
            let userLang = mainLang;  
            let userLangCookie = cookies.get(process.env.NEXT_PUBLIC_USER_LANGUAGE_COOKIE);
            let initSession = cookies.get(process.env.NEXT_PUBLIC_INIT_SESION_COOKIE);
            
            console.log("userLangCookie", userLangCookie)
            console.log("initSession", initSession)
    
            let acceptLanguage = req.headers['accept-language']; 
            if (acceptLanguage) {  
              acceptLanguage = (acceptLanguage.split(',')[0]).split('-')[0];
    
              let found = localeLanguages.filter(function (e) {
                return e.label == acceptLanguage;
              });
              if (found.length > 0) {
                userLang = acceptLanguage;
              }
    
              if (typeof initSession === "undefined" || initSession === null)
              {
                if (typeof userLangCookie === "undefined" || 
                  userLangCookie === null && userLang !== mainLang) 
                {
                  uriRedirect = `/${userLang}`;
                }
                else if (userLangCookie !== mainLang)
                {
                  uriRedirect = `/${userLangCookie}`;
                }
                cookies.set(process.env.NEXT_PUBLIC_INIT_SESION_COOKIE, 1, {
                  httpOnly: true // true by default
                })
              }
            } 
          }
          console.log("uriRedirect", uriRedirect)
          
          if (uriRedirect !== null) { 
              res.writeHead(302, { Location: `${uriRedirect}` }).end(); 
          } else {
            handle(req, res, parsedUrl);
          }
        } else {
          handle(req, res, parsedUrl);
        }
      }).listen(3000, (err) => {
        if (err) throw err
        console.log('> Ready on http://localhost:3000')
      })
    })

Я загружаю в Vercel, используя свой репозиторий github с командами git add / commit / push

Мой репозиторий: https://github.com/anialamo/nootric-next10

Не могли бы вы мне помочь? Что не так в моем развертывании?

Где должен быть размещен мой файл server.js? также в Vercel? Большое спасибо!


person user1228739    schedule 14.12.2020    source источник


Ответы (1)


Прежде чем использовать собственный сервер, вы должны прочитать документацию, чтобы увидеть недостатки

в нем говорится следующее:

Пользовательский сервер не может быть развернут на Vercel, для которой была создана платформа Next.js.

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

Справочная информация

person enoch    schedule 14.12.2020
comment
Ok! Благодарность! Знаете ли вы, на всякий случай ... Как я могу сделать перенаправление со своей страницы индекса, если я использую Static Html со StaticProps, но мне нужно в моей IndexPage, например Я использовал ServerSideProps, и это прекрасно работает! Но когда я выполняю xml-sitemaps.com, чтобы сканировать мой веб-сайт. Я также использую i18n для Nextjs 10 ... когда я сканирую свой веб-сайт на моем дополнительном языке, поисковый робот не дает мне неправильные результаты сканирования. По этой причине на моем локальном хосте я использую собственный server.js, потому что getServerSideProps не позволяет мне иметь статический сайт, который правильно работает для поисковых роботов. Любые идеи? - person user1228739; 14.12.2020