Nuxt.jsサービス側レンダリング実践、開発から導入まで
6743 ワード
悟る
いくつかの土曜日と日曜日の試みを経て、ついにサービス側のレンダリングの中でよくある問題を解決して、SEOがいないのが問題な時、私たちが先端の本当の春をするのかも知れなくて、その中でもいくつかの小さな穴に出会って、Nuxt.jsの公式はやはりとても力を入れて、issueを提げた后にとても积极的に助けて、再びNuxtに感谢します.jsの開発チーム.
ルーティング認証
最初のトラは上陸時の鑑権問題で、どのようにtokenを地元に保存するかです.公式にexpress-sessionを使ってこの問題を解決しますが、このようにバックエンドもnodejsを使う必要があります.当社が使用しているPHPです.クッキーが試してもいいかもしれないと考えて、私はこのようにしました.
私はログイン要求をnodejsで転送し、ユーザーが提出したデータをバックエンドに転送し、バックエンドから戻ったtokenをクッキーに設定し、データをフロントエンドに返し、フロントエンドはvuexでtoken状態を保存します.このようにtokenはクッキーとメモリに同時に存在し、ページ面をリフレッシュするのも正常なフロントエンドストレージtokenです.
この問題はこのように解決され、ローカルに格納する必要があるすべてのデータがこのように解決されます.
コンポーネント内のデータのレンダリング
もう一つの小さな問題はcomponentsでデータがどのようにレンダリングされるかです.Nuxt.jsにはpageのコンポーネントのみが
これでコンポーネント内のデータもレンダリングできます
フィルタの使用
Nuxt.jsのpluginsデザインの個人的な感覚はやはり人間的で、使うのはまったく簡単ではありません.pluginsにfiltersを新規作成します.js、フィルタはこのように遊ぶことができます:
そしてnuxt.config.jsに登録してください.
コンポーネントではhappyを使用できます.
ミドルウェア
たとえば、ユーザーがログインしていない状態で、ルーティングによって認証が必要なページに侵入した場合、いくつかのエラーをカスタマイズできます.
このミドルウェアをコンポーネントで使用するには、次の手順に従います.
マルチレベルルーティングネスト
公式にはこのような状況は少ないと言われていますが、私は多くのものを使っていることに気づきました.例えば、異なる分類には異なるページがあります.このように分類とページは動的ルーティングで、図に示しています.
コンパイルの結果:
プロジェクトの導入
8月ごろ、nodejsプロジェクトの配置方法についていくつかの文章を書いて、振り返って書いたのはやはり料理を比較して、時間が経つにつれて、いくつかの間違いを修復して、いくつかの間違いを発見して、全体の書くのがあまりにも乱れています.そこで1日引き、新しいサーバで実践しながら記録し、上記の文章をgitbookでまとめましたが、ここでは展開されず、長すぎて自動配置に関する内容が増えました
プロジェクトの実践
この小さなプロジェクトは私が数ヶ月前に書いたもので、最近の1月にNuxtを使いました.jsは再構成する、先端にNuxtを用いた.js+vuex、バックエンドはNodejs+MongoDBを使用して、vueでmarkdownエディタを書いて、画像のアップロードとサービス側のレンダリングをサポートして、効果図:
トップページ
エディタ
GitHub
gitbook
いくつかの土曜日と日曜日の試みを経て、ついにサービス側のレンダリングの中でよくある問題を解決して、SEOがいないのが問題な時、私たちが先端の本当の春をするのかも知れなくて、その中でもいくつかの小さな穴に出会って、Nuxt.jsの公式はやはりとても力を入れて、issueを提げた后にとても积极的に助けて、再びNuxtに感谢します.jsの開発チーム.
ルーティング認証
最初のトラは上陸時の鑑権問題で、どのようにtokenを地元に保存するかです.公式にexpress-sessionを使ってこの問題を解決しますが、このようにバックエンドもnodejsを使う必要があります.当社が使用しているPHPです.クッキーが試してもいいかもしれないと考えて、私はこのようにしました.
app.post('/api/login', function (req, res) {
// , token
async function login () {
const { data } = await axiosServer.post('/login', req.body)
return data
}
login().then(function (data) {
// token cookie
const { token } = data
if (token) {
res.cookie('token', token, {
maxAge: 60000 * 60 * 24
})
}
//
return res.json(data)
})
})
私はログイン要求をnodejsで転送し、ユーザーが提出したデータをバックエンドに転送し、バックエンドから戻ったtokenをクッキーに設定し、データをフロントエンドに返し、フロントエンドはvuexでtoken状態を保存します.このようにtokenはクッキーとメモリに同時に存在し、ページ面をリフレッシュするのも正常なフロントエンドストレージtokenです.
async nuxtServerInit ({ dispatch, commit }, { req, res }) {
if (req.cookies && req.cookies.token) {
// token
commit('SET_USER', req.cookies.token)
}
},
// SET_USER
SET_USER (state, token) {
state.token = token
},
この問題はこのように解決され、ローカルに格納する必要があるすべてのデータがこのように解決されます.
コンポーネント内のデータのレンダリング
もう一つの小さな問題はcomponentsでデータがどのようにレンダリングされるかです.Nuxt.jsにはpageのコンポーネントのみが
fetch
とasyncData
の方法があるので、layoutレイアウトページを使用する場合、コンポーネントがデータを要求する必要がある場合はレンダリングできません.解決策はnuxtServerInit
の方法でコンポーネント内のデータを初期化し、以下のようにします. async nuxtServerInit ({ dispatch, commit }, { req, res }) {
//
await dispatch('ADMIN_INFO')
await dispatch('TAGS')
await dispatch('ARCHIVES')
}
これでコンポーネント内のデータもレンダリングできます
フィルタの使用
Nuxt.jsのpluginsデザインの個人的な感覚はやはり人間的で、使うのはまったく簡単ではありません.pluginsにfiltersを新規作成します.js、フィルタはこのように遊ぶことができます:
import Vue from 'vue'
//
export function formatDate (date, fmt) {
let newDate = new Date(date)
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (newDate.getFullYear() + '').substr(4 - RegExp.$1.length))
}
let o = {
'M+': newDate.getMonth() + 1,
'd+': newDate.getDate(),
'h+': newDate.getHours(),
'm+': newDate.getMinutes(),
's+': newDate.getSeconds()
}
for (let k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
let str = o[k] + ''
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str))
}
}
return fmt
}
let filters = {
formatDate
}
Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key])
})
export default filters
そしてnuxt.config.jsに登録してください.
plugins: [
'~plugins/filters.js'
]
コンポーネントではhappyを使用できます.
{{date | formatDate('yyyy-MM-dd')}}
ミドルウェア
たとえば、ユーザーがログインしていない状態で、ルーティングによって認証が必要なページに侵入した場合、いくつかのエラーをカスタマイズできます.
// auth.js
export default function ({ store, error }) {
// props error
if (!store.state.token) {
error({
message: 'cookie , ',
statusCode: 403
})
}
}
このミドルウェアをコンポーネントで使用するには、次の手順に従います.
export default {
middleware: 'auth',
//
fetch ({redirect, store}) {
if (!store.state.token) {
redirect('/login')
}
},
}
マルチレベルルーティングネスト
公式にはこのような状況は少ないと言われていますが、私は多くのものを使っていることに気づきました.例えば、異なる分類には異なるページがあります.このように分類とページは動的ルーティングで、図に示しています.
コンパイルの結果:
プロジェクトの導入
8月ごろ、nodejsプロジェクトの配置方法についていくつかの文章を書いて、振り返って書いたのはやはり料理を比較して、時間が経つにつれて、いくつかの間違いを修復して、いくつかの間違いを発見して、全体の書くのがあまりにも乱れています.そこで1日引き、新しいサーバで実践しながら記録し、上記の文章をgitbookでまとめましたが、ここでは展開されず、長すぎて自動配置に関する内容が増えました
プロジェクトの実践
この小さなプロジェクトは私が数ヶ月前に書いたもので、最近の1月にNuxtを使いました.jsは再構成する、先端にNuxtを用いた.js+vuex、バックエンドはNodejs+MongoDBを使用して、vueでmarkdownエディタを書いて、画像のアップロードとサービス側のレンダリングをサポートして、効果図:
トップページ
エディタ
GitHub
gitbook