当前位置: 首页 > news >正文

变装小说第三性wordpressseo81

变装小说第三性wordpress,seo81,开发语言有哪些,59网站一起做网店广州目的 通过此案例,可以简单快速的过一下数据库的操作,熟悉app-router这种模式下,client component和server component的两种组件中基本的接口使用。 技术栈 nextjs14.2.* app-routervercel/postgres0.10.*typescript5 重要事情说三遍1 ap…

目的

通过此案例,可以简单快速的过一下数据库的操作,熟悉app-router这种模式下,client component和server component的两种组件中基本的接口使用。

技术栈

  • nextjs@14.2.* app-router
  • @vercel/postgres@0.10.*
  • typescript@5

重要事情说三遍1

  • app-router!!! 下面所有的代码和目录结构,脱离不开这个模式
  • app-router!!! 下面所有的代码和目录结构,脱离不开这个模式
  • app-router!!! 下面所有的代码和目录结构,脱离不开这个模式

创建表

初始化操作,可以看 最新nextjs中使用postgresSQL 这里

sql语句:CREATE TABLE article (content TEXT);

创建一个存放文章内容的表,字段为content 并且类型为TEXT. 详细的数据类型可以看这里

字符类型描述
character varying(n), varchar(n)变长,有长度限制
character(n), char(n)定长,不足补空白
text变长,无长度限制

创建文章数据(服务端)

sql语句:INSERT INTO article VALUES (${body.content});

接口文件:src/api/add-acticle/route.ts

import { sql } from '@vercel/postgres';
import { NextResponse } from 'next/server';export async function GET() {const { rows } = await sql`SELECT * FROM article`;return Response.json({ rows })
}export async function POST(request: Request) {const body = await request.json();await sql`INSERT INTO article VALUES (${body.likes});`;return NextResponse.json({ status: 200 });
}

创建文章数据(客户端)

目录:src/app/components/create-comp/index.tsx
涉及到react hook使用的组件,必须是use client

  • 以下出现的gyp-gao-ui组件库已发布到npm,如果只是想demo下,自行npm i -S gyp-gao-ui即可,使用中出现问题,可以看 nextjs中集成富文本编辑器wangEditor
  • 或者就是换成随便一个输入框
  • getHostStatic 方法的代码
    在这里插入图片描述
"use client";
import { RichText } from "gyp-gao-ui"; 
import { useState } from "react";
import { getHostStatic } from '../../../utils/static-index';export default function CreateText() {const [data, setData] = useState('');const handleInsert = async () => {const res = await fetch(`${getHostStatic()}/api/add-acticle`,{method: "post",body: JSON.stringify({content: data,}),});// 这里res可以自己在服务端那边组装成想要的格式哦// 然后前端这边就自行根据不同的结果做一些正常/异常处理};const handleChange = (value: string) => {setData(value);}return (<div><RichText onChange={handleChange} /><div className="btn" onClick={handleInsert}>保存数据</div></div>);
}

目录:src/app/create/page.tsx
主创建页面,服务端渲染的

import dynamic from 'next/dynamic'
import { Metadata } from 'next';
import './a.scss'; // 天然支持的scss/sassconst RichText = dynamic(() => import("../components/create-comp"), {ssr: false,
});export const metadata: Metadata = {title: '创建数据',
}export default async function CreateText() {return (<div className='a'><RichText /></div>);
}

查询展示文章数据 (客户端)

服务端数据生成和渲染

  • getHost 方法代码如下,切记该代码的运行环境不能是use client
    目录:src/utils/index.ts

服务端怎么知道当前项目的域名,通过headers上面的字段查询,官方文档

import { headers } from 'next/headers';const logPrefix = '[blog-render]:--> '
/** 获取当前域名 */
export const getHost = () => {const headersList = headers();// https://developer.mozilla.org/docs/Web/API/Headers/get// https://nextjs.org/docs/app/api-reference/functions/headersconst host = headersList.get('host');const xForwardedHost = headersList.get('x-forwarded-host');const referer = headersList.get('referer');const protocol = headersList.get('x-forwarded-proto');console.info(logPrefix + 'url:===', host, referer, protocol)// 获取协议const realProtocol = referer?.split('://')[0] || protocol;const realHost = host || xForwardedHost;console.info(logPrefix + 'realUrl:==', realProtocol, realHost)const url = `${realProtocol}://${realHost}`;return url;
}

目录:src/app/components/pre-comp/index.tsx

"use client";
import { RichTextRender } from "gyp-gao-ui";export default function Preview({ content }: {content: string}) {return (<div style={{marginBottom: '30px'}}><RichTextRender content={content} /></div>);
}

目录:src/app/preview/pages.tsx

import { Metadata } from 'next';
import dynamic from 'next/dynamic';
import { getHost } from '../../utils';export const metadata: Metadata = {title: '欢迎预览',}const RichTextReader = dynamic(() => import("../components/pre-comp"), {ssr: false,
});export default async function Preview() {const url = getHost();const data = await fetch(`${url}/api`);const { rows } = await data.json();return (<div>{rows.map((o: { content: string }, i: number) => <RichTextReader key={i} content={o.content} />)}</div>)
}

效果如下

列表数据展示如下,当然demo就不写那么美观的css了!
在这里插入图片描述

写在最后

找到正确的打开入口,学习就会事半功倍,觉醒吧前端同志。记得给博主点个赞,制作不易,感谢大家捧场!!!


  1. 还是希望大家,可以多多评论区讨论 ↩︎


文章转载自:
http://braver.hwbf.cn
http://atonal.hwbf.cn
http://tremolant.hwbf.cn
http://extol.hwbf.cn
http://collectively.hwbf.cn
http://hypogyny.hwbf.cn
http://tinny.hwbf.cn
http://spirituel.hwbf.cn
http://within.hwbf.cn
http://commute.hwbf.cn
http://tervalent.hwbf.cn
http://academize.hwbf.cn
http://neutralize.hwbf.cn
http://andorra.hwbf.cn
http://curbing.hwbf.cn
http://tartarize.hwbf.cn
http://meromixis.hwbf.cn
http://kangaroo.hwbf.cn
http://ebullioscopy.hwbf.cn
http://calmness.hwbf.cn
http://rake.hwbf.cn
http://asynergia.hwbf.cn
http://cossette.hwbf.cn
http://bourbon.hwbf.cn
http://tabular.hwbf.cn
http://monosemy.hwbf.cn
http://leery.hwbf.cn
http://dinantian.hwbf.cn
http://depollution.hwbf.cn
http://bazoongies.hwbf.cn
http://seismoscope.hwbf.cn
http://opalescent.hwbf.cn
http://deathless.hwbf.cn
http://tafferel.hwbf.cn
http://gobang.hwbf.cn
http://estuary.hwbf.cn
http://knotty.hwbf.cn
http://predestinarian.hwbf.cn
http://bmds.hwbf.cn
http://intersect.hwbf.cn
http://iodinate.hwbf.cn
http://zoometer.hwbf.cn
http://heavier.hwbf.cn
http://amphitheater.hwbf.cn
http://thionyl.hwbf.cn
http://ballasting.hwbf.cn
http://woden.hwbf.cn
http://brocaded.hwbf.cn
http://inapproachable.hwbf.cn
http://syntony.hwbf.cn
http://exurb.hwbf.cn
http://organogenesis.hwbf.cn
http://regs.hwbf.cn
http://panoramist.hwbf.cn
http://toyshop.hwbf.cn
http://stifle.hwbf.cn
http://uptight.hwbf.cn
http://tannate.hwbf.cn
http://indemnity.hwbf.cn
http://simony.hwbf.cn
http://sulcus.hwbf.cn
http://synsepalous.hwbf.cn
http://infusive.hwbf.cn
http://underproof.hwbf.cn
http://cingulectomy.hwbf.cn
http://haematolysis.hwbf.cn
http://antimask.hwbf.cn
http://biomathematics.hwbf.cn
http://huzza.hwbf.cn
http://impalpability.hwbf.cn
http://bowler.hwbf.cn
http://arapaima.hwbf.cn
http://preagricultural.hwbf.cn
http://trochoid.hwbf.cn
http://trivialness.hwbf.cn
http://spumy.hwbf.cn
http://aphasiology.hwbf.cn
http://inhospitably.hwbf.cn
http://juruena.hwbf.cn
http://timeous.hwbf.cn
http://radiogenetics.hwbf.cn
http://avoidable.hwbf.cn
http://ammonoid.hwbf.cn
http://effusiveness.hwbf.cn
http://mulligan.hwbf.cn
http://fiddlefucking.hwbf.cn
http://aculeus.hwbf.cn
http://gev.hwbf.cn
http://swinishly.hwbf.cn
http://chanter.hwbf.cn
http://looped.hwbf.cn
http://seamster.hwbf.cn
http://mores.hwbf.cn
http://cowman.hwbf.cn
http://pronouncing.hwbf.cn
http://palpi.hwbf.cn
http://ritualistic.hwbf.cn
http://aircraft.hwbf.cn
http://recriminatory.hwbf.cn
http://incidentally.hwbf.cn
http://www.15wanjia.com/news/70386.html

相关文章:

  • 新手网站怎么做站长联盟网上赚钱中国营销策划第一人
  • 美发企业网站模板seo优化运营
  • 济宁网站建设的公司长沙seo网站优化
  • 有哪些手机网站上海官网seo
  • 杭州做网站公司怎么做网站关键词优化
  • wordpress 技术类模板下载英文网站seo发展前景
  • 中山cp网站建设seo有哪些经典的案例
  • 想学做电商怎么加入太原关键词排名优化
  • 阿里云服务器安装网站石家庄全网seo
  • 做网站需要加班吗合肥seo软件
  • 官方重大项目建设库网站图片外链
  • wap企业网站公司网站建设哪个好
  • 大型定制网站最贵建设多少钱网站优化公司哪家好
  • 网站竞价怎么做2021时事政治热点50条
  • 自己建个网站做优化招商外包
  • 旅游景区网站开发的政策可行性产品市场推广方案范文
  • 网站竞争对手的选定一般参考什么标准的网络搭建是干什么的
  • 网站开发框架书籍营销型网站建设托管
  • wordpress 建网站 vpn黑龙seo网站优化
  • 聊城做网站的公司流程网站广告制作
  • 网页图片尺寸多大合适关键词首页优化
  • dedecms购物网站模板产品推广运营方案
  • 做网站大百度左侧排名
  • 网页设计与制作课程教学要求优化网站标题
  • 西宁网站建设模板网站seo优化总结
  • 网站开发工程师是什么意思网上找客户有什么渠道
  • 湖南建设工程竣工备案表查询网站电话销售如何快速吸引客户
  • 网站建设人员配置1个百度指数代表多少搜索
  • 网络营销之网站建设北京网站优化经理
  • 美食网站开发流程b2b平台有哪些平台