Говоря, что PHP — это «лучший» язык в мире, я не PHPer, поэтому сегодня наш главный герой — не PHP, а внешний интерфейс (Nextjs). Итак, вопрос в том, что такое Nextjs?
Next.js is a lightweight framework for static and server-rendered applications.
Проще говоря: Next.js — это фреймворк для рендеринга на стороне сервера, основанный на React. Итак, сегодня мы поговорим о реализации Next.js.
представлять
В этом проекте реализована схема изоморфизма React с использованием технологии Nextjs. Используя Nodejs для создания службы в сочетании с базой данных Mongoose, реализована простая система блогов.
Также см. проектверсия v1.0 через шаблон Ejsреализация,Похожие статьи >>.
Техническая реализация
- Node > 8.x
- Express
- mongoose
- react > 16.x
- Nextjs
- sass
- isomorphic-unfetch
Структура каталогов
├─server # 服务 │ ├─controllers # 控制器 │ ├─dto # │ ├─models # 模型 │ ├─routes # 路由 │ └─service ├─pages # 页面 │ ├─…… # │ └─index.js # 主页面 ├─compontents # 组件 │ └─#…… ├─config # 配置文件 │ └─#…… ├─assets # 静态资源 │ └─#…… ├─build # 发布目录 │ └─ #…… ├─next.config.js # next配置文件 ├─package.json ├─postcss.config.js # postcss配置 ├─server.js # 服务入口文件 └─.babelrc
как использовать
В основном для моего текущего проекта >>node-blog-appДавайте поговорим о том, как его использовать:
Install
git clone https://github.com/Hancoson/node-blog-app.git yarn
Install mongodb
brew install mongodb
Start Mongo
mongod # or brew services start mongodb
Наконец выполните:
mongo
Create a datebase
use {nodeApp}
Start App
npm run dev #(start dev) npm run build #(构建) npm start #(启动项目)
Столкнуться с проблемами
Когда проект стартовал, он тоже столкнулся (наступил) с массой проблем (ям). Давайте выберем несколько для разговора.
компилировать
Изначально клонировал официальную демку, но скомпилировал(npm run dev
) столкнется(node:58300) UnhandledPromiseRejectionWarning: Error: Cannot find module 'babel-plugin-transform-runtime'
Я сообщил об ошибке.Позже я проверил информацию и упомянул об этом в вопросах.Официальный ответ мне устарел..babelrc
влияние. Эй~ Я потратил впустую полдня, по словам великого бога@timneutkensруководство, добавлены новые.babelrc
, который решает проблему.
//.babelrc { "presets": [ "next/babel" ], "plugins": [ "@babel/plugin-transform-runtime" ] }
получить данные
Nextjs предоставляет новую функцию жизненного циклаgetInitialProps
. Конкретное использование заключается в следующем:
import React from 'react' export default class extends React.Component { static async getInitialProps({ req }) { //这里可以使用 isomorphic-unfetch 获取 server 端数据 const userAgent = req ? req.headers['user-agent'] : navigator.userAgent return { userAgent } } render() { return ( <div> Hello World {this.props.userAgent} </div> ) } }
Когда страница отображает и загружает данные, мы используемgetInitialProps
Этот асинхронный статический метод для получения реквизита (что-то вродеJSON.stringify
) объект. При инициализации страницыgetInitialProps
Метод будет выполнен только на стороне сервера.