开发(react框架)博客遇到的坑

p01.前台部分

  1. 新版Next结构差很多,"不拘小节"的只需要跟着建目录照着做就好,pages文件夹是网站的根目录。
  2. 新版Next 不支援在其他页面分别引入 css 样式,全部样式都在 _app.js 中引入。
  3. 目前 antd 的 Icon 使用方式已经不是直接使用 Icon 了,引入方式改为: import { 要用的icon标签 } from '@ant-design/icons';。更多请参考: https://ant.design/components/icon-cn/
  4. 前台渲染markdown时修改属性名source改为children。
<div className="detailed-content" >
   <ReactMarkdown 
   children={markdown} 
   escapeHtml={false}  
   />
</div>
  1. 用markdown-navbar第一个标题不显示嘛,但是好像加一个#号能出来,或者markdown中全部标题都用二级标题 ##。

开发(react框架)博客遇到的坑

p02.中台部分

  1. 从后端传参时用的是 getInitialProps 方法,Next 9.3+ 后,官方并不推荐使用这个方法,可以改用getStaticProps 和 getServerSideProps (虽然不改也不会怎样就是了…) [ 搭配 fetch 取代 axios ] (可略过)。
    目前用的是getInitialProps ,后续考虑修改。

index中:

 export async function getServerSideProps() {
      const res = await fetch('http://127.0.0.1:7001/default/getArticleList')
      const data = await res.json()
      return { props: { data } }
      }

传参:

const Home = ({ data }) => {

detailed.js中:

export async function getServerSideProps(context) {
      const id = context.query.id
      const res = await 
      fetch('http://127.0.0.1:7001/default/getArticleById/'+id)
      const res_json = await res.json()
      const content = res_json['data'][0]
      return { props: { content } }
  }

传参:

const Detailed = ({content}) => {
  1. 引入 lodash 后,报这样的错: lodash.js 不是模块
    “h:/javascript/React/bolg/web/node_modules/lodash/lodash.js”不是模块。
    安装 npm install --save @types/lodash
  2. apiUrl中有的路径要“/”(嵌套路由) 有的不要 ,注意区分

p03.后台部分

  1. menu中将item.id写成了Id大写,导致传的值错误
  2. antd若用老版,password框用不了
  3. withCredentials: true cookies跨域
    12.在admin/src/Pages/Main.js 里面去掉 Route path=/index/ exact component={AdminIndex} /这个里面的精确匹配 exact 即可 。
    嵌套路由不能用精确匹配,同样的问题在AdminIndex.jsx文件add路由上也需要。
  4. 修改文章的时候类型未选中,需要把select 框的defaultValue改成value 就行了。
  5. 记得修改相应文章的路由也要在adminindex页面加上:id

p04.数据库部分

  1. sql主键id设置为自动递增
  2. 忘记root密码,看下面博客修改
    https://blog.csdn.net/weidong_y/article/details/80493743
    命令:update mysql.user set authentication_string=password('root') where user='root' ;
    修改密码命令换成上面的。
  3. 启动mysql遇到问题,服务名没写对,参考下面文章
    https://jingyan.baidu.com/article/3f16e00317bd5b2591c10306.html
  4. 数据库的变量名和实体sql语句中的名称是否一致
  5. 使用phpstudy的话。第一, 不需要提前安装MySQL, 因为phpStudy已经默认安装了; 第二安装了之后, 在环境变量加上PHPstudy安装目录下的mysql路径; 第三, phpstudy可以修改mysql数据库密码。
  6. 后端写sql语句时from article 要和后面的分开写,不知道为啥
'FROM article'+' LEFT JOIN type ON article.type_id = type.Id ' + 
        'LEFT JOIN categories ON article.categories_id = categories.Id '+  'WHERE article.id='+id

跨域问题

  1. 跨域解决办法: 修改 service/config/config.default.js
config.security = {
    csrf:{
      enable: false
    },
    domainWhiteList:['http://127.0.0.1:3001','http://127.0.0.1:3000','http://127.0.0.1:7001']
  }

  config.cors = {
    // origin: '*',
    credentials: true,  //允许Cook可以跨域
    allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS',
  };

如果用 cors origin只能设一个,用白名单可以设好几个。
备注1:报错 HTTP 500 => 应该是sql语法有错,检查一下,如果不是复制技术胖的代码,检查一下大小写、username和password变量有没有用单引号 ' 括住。
备注2:建议在 axios外面包裹 try catch 输出 error.response.data,失败的时候才知道错在哪。

上一篇:SSH返回Json格式的数据


下一篇:每日学习20210925