2

我正在考虑将 NextJS 集成到现有的 Django 项目中。该项目在其大部分页面中大量使用 Django 模板,我正在考虑通过利用 React 和构建设计/组件系统来使项目现代化。这个想法是我们最终会考虑用 NextJS 替换 Django。

我已经能够使用 Django 将请求代理到 NextJS,而且效果很好!我还能够将数据直接发送到 NextJS 路由,这样我就不必回调 Django 来获取数据。这种方法令人讨厌地具有仅发送键/值数据的限制。

这是工作代码。

# django
def get(self, request, *args, **kwargs):
  data = request.GET
  return self._handle_request(data, requests.post)

def _handle_request(self, data, make_request):
  data = {"hello": "world"}
  response = make_request("http://localhost:3000", data=data)
  return HttpResponse(response)
//nextjs 
import parse from "urlencoded-body-parser";

export async function getServerSideProps(context) {
  const { req } = context;
  const props = await parse(req);
  return { props };
};

那么考虑到这一点,有没有更好的方法来实现将数据发送到 NextJS 路由而无需进行回调?

4

1 回答 1

1

经过一些研究,我能够通过使用application/json内容类型来实现这一点。

class NextJsView(WhiteLabelMixin, View):
    def get(self, request, *args, **kwargs):
        data = request.GET
        return self._handle_request(data, requests.post)

    def _handle_request(self, data, make_request):
        data = {"hello": {"dark": "world"}}
        response = make_request("http://localhost:3000", json=json.dumps(data))
        return HttpResponse(response)
import getRawBody from "raw-body";

export async function getServerSideProps(context) {
  const { req } = context;
  let props = {};
  if (req.method == "POST") {
    const body = await getRawBody(req);
    props = JSON.parse(JSON.parse(body));
  }
  return { props };
}
于 2020-12-14T00:51:28.320 回答