@kotamat
だけkotamats
NuxtってSPA, SSR, generateってあるけど、どれ使うのがいいんすか?
うーん、generateかなー
とりあえず、SSRは使わなくていいんじゃね
へー、そうなんすね_φ(・_・
ソースは俺
あんまりフロントエンジニアとしては考えたくはない。
インフラエンジニアも考えたくはない。
あんまりフロントエンジニアとしては考えたくはない。
インフラエンジニアも考えたくはない。
UIフレームワークを使ったら
一度は通る道
あんまりフロントエンジニアとしては考えたくはない。
インフラエンジニアは知らない。
front
server
初回アクセス
画面遷移時
記事投稿
CI/CD等で
generate
upload
投稿のたびにgenerateが必要
And more...
特に設定せずともSSRと同様の
価値を提供できる
リクエスト
SPA
DOM生成
表示
サーバ
フロントJS
SSR
サーバ
フロントJS
"フロントJSのレンダリングが遅ければ"
SPAより早い
APIからデータ取得
{
"dependencies": {
"express-session": "^1.15.6",
"nuxt-express-module": "^0.0.11",
},
}
api/
├── bodyParser.js // bodyParserの設定
├── routers // 各種APIに必要なルーティングを設定
│ └── index.js
└── session.js // session周りの設定
const bodyParser = require("body-parser");
module.exports = function BodyParserModule(moduleOptions) {
this.addServerMiddleware(bodyParser.json());
};
const session = require("express-session");
module.exports = function SessionModule(moduleOptions) {
const options = {
secret: "hogehogehoge",
resave: false,
saveUninitialized: false,
...moduleOptions
};
this.addServerMiddleware(session(options));
};
const { Router } = require("express");
const router = Router();
// 外部APIとの認証処理などを記述
// clientId secretなどを環境変数とかで格納しておく
router.use("/api/auth", require("./auth"));
//...
module.exports = router;
module.exports = {
modules: [
"~/api/bodyParser",
"~/api/session",
[
"nuxt-express-module",
{
expressPath: "api",
routesPath: "api/routers"
}
]
]
};
export default {
middleware: "guest",
async mounted() {
try {
// 認証後のリダイレクトから結果を取得
const result = await firebase.auth().getRedirectResult();
const user = result.user;
if (!user) {
// providerを設定し、signinする
const provider = new firebase.auth.TwitterAuthProvider();
await firebase.auth().signInWithRedirect(provider);
return;
}
// providerに紐づくaccess_token等が取得できる
const token = result.credential.accessToken;
const secret = result.credential.secret;
} catch (err) {
console.error(err);
}
}
};
module.exports = function () {
this.nuxt.hook('generate:extendRoutes', async routes => {
const whiteList = ['/about', '/login'];
const routesToGenerate = routes.filter(page =>
whiteList.includes(page.route)
);
routes.splice(0, routes.length, ...routesToGenerate);
});
};
context.store.dispatch('nuxtServerInit')
pluginなどで初回ロード時に一回だけdispatchするようにすれば動く