Next.js getServerSideProps выдает 404 только на производстве
Я воспроизвел проблему в самой простой форме:
начнем с бэкенда:
#models.py
from django.db import models
from django.template.defaultfilters import slugify # new
class Article(models.Model):
slug = models.SlugField(primary_key=True,unique=True)
title = models.CharField(max_length=200)
description = models.TextField()
def save(self,*args,**kwargs):
if not self.slug:
self.slug = slugify(self.title)
super().save(*args,**kwargs)
#views.py
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from app import models
from app import serializer
class ArticleView(ModelViewSet):
serializer_class = serializer.ArticleSerializer
def get_queryset(self):
return models.Article.objects.all()
def post(self,request):
data = serializer.ArticleSerializer(data=request.data)
if data.is_valid():
a = models.Article.objects.create(title=data['title'],description=data['description'])
a.save()
return Response("succes",status=200)
return Response("fail",status=400)
#serializer.py
from rest_framework import serializers
from app import models
class ArticleSerializer(serializers.ModelSerializer):
slug = serializers.SlugField(read_only=True)
class Meta:
fields = 'slug','title','description',
model = models.Article
#settings.py
ALLOWED_HOSTS = ['localhost','127.0.0.1']
ACCESS_CONTROL_ALLOW_ORIGIN = '*'
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
ACCESS_CONTROL_ALLOW_CREDENTIALS = True
ACCESS_CONTROL_ALLOW_METHODS = '*'
ACCESS_CONTROL_ALLOW_HEADERS = '*'
# Application definition
INSTALLED_APPS = [
'app',
'rest_framework',
'corsheaders',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
"corsheaders.middleware.CorsMiddleware",
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Я предоставил все, что связано с бэкендом
Теперь на следующей стороне js:
я получил следующее (внутри папки pages):
а внутри [slug].js
import axios from 'axios'
export async function getServerSideProps({params}){
try{
let res = await axios.get(`https://somehost.com/articles/${params.slug}/`)
let data = res.data
return {
props:{data:data}
}
}
catch(e){
return {
props:{}
}
}
}
export default function Component({data}){
if(data){
return<div>
<div>{data.title}</div>
<div>{data.description}</div>
</div>
}
}
я получаю это на производстве:
Что еще больше раздражает, так это то, что на вкладке network нет запроса, отправляемого на backend.
есть идеи?
EDIT: Я развертываю на Cloudflare НЕ VERCEL.