Background

在学习了getServerProps之后,我try 构建一个项目,使用prisma从postgres返回一些数据,但由于某种原因,当我try 映射posts数组(见下文)时,它返回未定义的array.Enevn我相信我遵循了文档页面上的语法规则,到目前为止运气不好.我被困了很长时间,我不知道为什么,我做错了什么.至少VS代码将POST识别为数组,但getServerProps函数似乎从未运行过.谢谢你的阅读,让我知道你对此的 idea .

Summary of my problem

  • 我不知道为什么数组(posts变量)在函数内部被识别时没有定义.
  • 我不知道为什么getServerProps似乎没有被调用

Note:

Prisma和postgres正在这个项目中工作

帖子.js公司

import { PrismaClient } from '@prisma/client'
function Posts({ posts }) {

return (
  <div>
    <h1 className="text-4xl block text-gray-500 font-bold pt-5 text-center">
      Posts
    </h1>
    <div>
      {posts.map((post) => {
        <h3>{post.title}</h3>;
      })}
    </div>
  </div>
);
}

export const getServerSideProps = async () => {
    const prisma = new PrismaClient()
    const posts = await prisma.post.findMany()

    
    return { props: { posts } }
  }

export default Posts

架构.棱镜

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Post {
  id         Int        @id @default(autoincrement())
  title     String
  content   String
}

获取错误:

错误消息

Error Message

Prisma Studio

Prisma studio

文件 struct

FileStructure

在研究了StackOverflow的最佳答案之后

enter image description here

推荐答案

您不能在pages目录外使用getServerSideProps.更改代码,使prisma调用位于页面内,并使用props将帖子传递给Posts组件.例如,如果您正在pages/index.js中显示帖子:

export const getServerSideProps = async () => {
  const prisma = new PrismaClient()
  const posts = await prisma.post.findMany()
    
  return { props: { posts } }
}

function Home({ posts }) {
  return (
    <Posts posts={posts}/>
  );
}

export default Home

旁注:您不应该每次调用getServerSideProps时都创建PrismaClient.创建棱镜.js文件,在那里初始化并在需要时重用:

import { PrismaClient } from '@prisma/client'

let prisma

if (process.env.NODE_ENV === 'production') {
  prisma = new PrismaClient()
} else {
  // Ensure the prisma instance is re-used during hot-reloading
  // Otherwise, a new client will be created on every reload
  globalThis.prisma = globalThis.prisma || new PrismaClient()
  prisma = globalThis.prisma
}

export default prisma

Javascript相关问答推荐

React对话框模式在用户单击预期按钮之前出现

如何提取Cypress中文本

使用TMS Web Core中的HTML模板中的参数调用过程

如何分配类型脚本中具有不同/额外参数的函数类型

IMDB使用 puppeteer 加载更多按钮(nodejs)

如何在Connect 4游戏中 for each 玩家使用位板寻找7形状?

如何找出摆线表面上y与x相交的地方?

无法检测卡片重叠状态的问题

Prisma具有至少一个值的多对多关系

我怎么在JS里连续加2个骰子的和呢?

为什么123[';toString';].long返回1?

从页面到应用程序(NextJS):REST.STATUS不是一个函数

第二次更新文本输入字段后,Reaction崩溃

如何在Press上重新启动EXPO-AV视频?

使用父标签中的Find函数查找元素

如何找到带有特定文本和测试ID的div?

通过解构/功能组件接收props-prop验证中缺少错误"

ComponentWillReceiveProps仍在React 18.2.0中工作

如何将字符串拆分成单词并跟踪每个单词的索引(在原始字符串中)?

REACT-本机错误:错误类型错误:无法读取未定义的容器的属性