A Koa view engine which renders Vue components on server.
éæ±1.xç忝/npmå æ¯ækoa1ï¼master忝å2.xçæ¬çnpmå æ¯ækoa2ã
æçæä¹¦åvueç代ç ï¼æè§å¥¹çè¯æ³å¾ç®æ´æäºï¼å¹¶ä¸æ¯æç»ä»¶åï¼ææè¿å¨å¦ä¹ 使ç¨koaç¼ånode webåºç¨ï¼å¨koaæ¡æ¶ä¸æ¸²æè§å¾æå¾å¤éæ©ï¼ä½æ¯ææ³å¨koaä¸ä½¿ç¨vueæ¥æ¸²æè§å¾ï¼
æå¨è°ç äºvueçssrè§£å³æ¹æ¡åï¼æè§å¥¹å¾å¥½ï¼ä½æ¯ä¸æ»¡è¶³æçéæ±ï¼æåªæ¯æ³ç¨å¥¹çè¯æ³åç»ä»¶åæ¥å®ç°è§å¾æ¸²æï¼æ¸²æçæ°æ®æ³ä»koaçctx.state
ä¸è¯»åï¼ä¹ä¸æ³åå端åç¨åä¸å¥è·¯ç±è¿ç§æ¹å¼ï¼
æä»¥æè§å¾ç¨vueçssrçåºç¡é¨åââæå¡ç«¯æ¸²ævueå®ä¾ï¼æ¥å®ææçéæ±ï¼å³æ¤ä¸é´ä»¶è¯çï¼
æ¬ä¸é´ä»¶å å«åè½ï¼å¾ æ·»å åè½ï¼æ³¨æï¼æ¬ä¸é´ä»¶è½ç¶æ¯ævueç»ä»¶çç¼åè¯æ³ï¼ä½æ¯ä» ä¼å¤çå ¶ä¸ç
template
é¨åï¼å ¶ä»çå¦style
ï¼script
çé¨åé½ä¼åæ ·è¾åº
<template>
    <html lang="zh-CN">
Â
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>{{hight(app.name)}} - {{app.version}}</title>
        <slot name="meta"></slot>
    </head>
Â
    <body>
        <h1>{{layoutName}} - {{layoutVersion}}</h1>
        <slot name="top"></slot>
        <slot></slot>
        <slot name="bottom"></slot>
    </body>
Â
    </html>
</template>
Â
<template>
    <strong style="color:red;">
        <slot></slot>
    </strong>
</template>
Â
Â
<template>
    <Master>
        <ul>
            <li v-for="(item,index) in users" :key="index">{{item.name}} <Age>{{ add(item.age, 1) }}</Age></li>
        </ul>
    </Master>
</template>
è§çº¦var path = require('path');
var Koa = require('koa');
var VueView = require('koa-vue-view');
Â
var app = new Koa();
app.use(VueView({
    methodName: 'render',
    data: {
        _: require('lodash'),
        app: {
            name: 'Github',
            version: '1.0.0'
        }
    },
    methods: {
        add(a, b) {
            return a + b;
        }
    },
    components: {
        Master: {
            path: path.resolve(__dirname, './views/Master.vue'),
            data() {
                this.layoutVersion = '1.0.0';
                return {
                    layoutName: 'master'
                }
            },
            methods: {
                hight(str) {
                    return `***${str}***`;
                }
            }
        },
        Age: path.resolve(__dirname, './components/Age.vue')
    }
}));
Â
app.use(ctx => {
    ctx.state.users = [{
        name: 'Tom',
        age: 20
    }, {
        name: 'Alice',
        age: 18
    }];
    ctx.render(path.resolve(__dirname, './views/User.vue'));
   Â
})
Â
Â
app.listen(8200);
header
ãtemplate
ãfooter
ï¼
template
æªåèªæä»¶ä¸ç¬¬ä¸å¯¹é¡¶çº§template
æ ç¾ä¸çå
容ï¼header
æªåèªæä»¶ä¸ç¬¬ä¸å¯¹é¡¶çº§template
æ ç¾çåé¢å
容ï¼footer
æªåèªæä»¶ä¸ç¬¬ä¸å¯¹é¡¶çº§template
æ ç¾çåé¢å
容ï¼template
æ ç¾template
é¨åapp.use(require('koa-vue-view')(options));
坿¥åçoptionsé项ï¼
é项 ç±»å é»è®¤å¼ æè¿° methodName string render å¨koa ctxæ³¨åæ¸²æè§å¾çæ¹æ³åï¼é»è®¤render replaceBody boolean true æ¯å¦ä½¿ç¨æ¸²æåçåç¬¦ä¸²æ¿æ¢ctx.bodyçå 容 appendBody boolean false replaceBody=trueæ¶ï¼å°æ¸²æåçå符串追å å°ctx.bodyä¸è¿æ¯ç´æ¥èµå¼ç»ctx.body filterHtml function 坿å®ä¸ä¸ªå½æ°ç¨äºè¿æ»¤renderä¹åçhtmlå符串ï¼ctx.body=彿°è¿åå¼=è¿æ»¤åçå符串 cache boolean process.env.NODE_ENV === 'production' æ¯å¦å¯ç¨ç¼åï¼å¯ç¨åä» å¨ç¬¬ä¸æ¬¡å è½½è§å¾æ¶è¯»åå ¶å 容ï¼åç»å°ä»ç¼åä¸è¯»å renderer object require('vue-server-renderer').createRenderer() vue ssr 渲æå¨ data object|function å ¨å±å ±äº«æ°æ®å¯¹è±¡ï¼å¨æä»¥ç»ä»¶å页é¢ä¸é½å¯ä»¥å ±äº«ä½¿ç¨ï¼å¦æä¼ éçæ¯functionï¼åæ§è¡functionçthis对象æåè¿è¡çç»ä»¶æè 页é¢çvueå®ä¾ vue mixin坿¥åçä»»æé项ï¼å¦ï¼dataï¼methodsï¼components å°ä»¥mixinçæ¹å¼ï¼æ·»å å°æ¯ä¸ªæ¸²æç页é¢çmixinsä¸ï¼ Renderæ´æ°æ¥å¿app.use(ctx => {
    ctx.render(æä»¶è·¯å¾|ç»ä»¶é 置对象).then(html=>{})
})
2.1.6 | 1.1.61.x对åºçæ¯koa1éç¨ççæ¬ï¼2.x对åºçæ¯koa2对åºççæ¬ï¼
filterHtml
é
置项ï¼ç¨äºè¿æ»¤æ¸²æåçhtmlå符串RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4