nodejs學習手記(2)

express 與 HTML

使用express返回HTML內容

Content-Type:text/html
fs.createReadStream('xxx.html').pipe(res)
res.render()

模板渲染引擎

模板

用途:複用HTML組建,簡化開發流程
比喻:模具

渲染/生成

用途:生成最終的HTML內容
比喻:烤餅乾

模板引擎:

app.set()  
ejs:http://ejs.co
app.set('view engine','ejs')
res.render('home.ejs',{title:'ejs template'})

demo

var express = require('express');
var app = express();

app.set('view engine','ejs');
app.set('views',__dirname + '/views');
app.get('/',function(req,res){
        res.render('home.ejs',{name:'rayshaw'});
});
app.get('/request/:id',function(req,res){   //可以把請求路徑轉化爲參數
    var ids = {name:'rayshaw','id':req.params['id']};
    res.render('home.ejs',ids);
});

app.listen(8888);

#Error: Cannot find module ‘ejs’

解決辦法:
npm install --save ejs
原因是ejs沒有安裝到當前文件夾下
或者沒有安裝ejs

ejs客戶端

<div id='tmp'></div>
<script type="text/javascript" src="/ejs.min.js"></script>
<script type="text/javascript">
    var tmpl = '<p>new template</p>';   //模板內容
    var newTempDiv = document.getElementById('tmp');
    newTempDiv.innerHTML = ejs.render(tmpl);
</script>

#需要在服務端把靜態資源暴露給http客戶端

app.use(express.static(__dirname));//此處是根目錄下所有的文件

使用app.set來設置express實例所所使用的模板引擎

ejs:http://ejs.co
app.set('view engine','ejs')
res.render('home.ejs',{title:'ejs template'})

前後端共用模板

模組化

如何設計API

不要讓用戶使用關鍵字new //這裏的用戶指使用你設計的API的程序員
保持簡潔    //內部代碼保持簡潔、設計清楚、命名、駝峯、儘量不要使用_(下劃線)
不要輕易輸出接口(只暴露核心接口給用戶)

發佈到NPM

npm init    //初始化
npm publish //發佈到npm

使用loopback快速搭建用戶系統

loopback.io

loopback與express的關係

express是內核(官網說是web服務器的框架)

不應該直接使用在商業項目
粒度太小
使用者需要handle太多細節

loopback是工具

對於搭建一個Web2.0即可交互的網站系統粒度合適

loopback是一個MVC框架,包含哪些部分

模型系統

PersistentModel
鼓勵使用者將大部分商業邏輯寫於在模型中完成

控制器

remote methods
remote hooks

視圖(沿用express的視圖模型)

loopback組建

loopback-component-passport //三方賬號登陸
loopback-component-storage  //

loopback源代碼架構介紹

apidocs.strongloop.com/loopback

github.com/strongloop/loopback

安裝strongloop工具鏈並創建項目

npm install -g strongloop

使用explorer與swagger

slc loopback:model  //建立模型  //根據提示可以生成對應的json描述文件

swag    http://0.0.0.0:3000/explorer    //提供一個簡單的web頁面,可以看到你提供的接口

problem

如何擴展model

模型系統與數據源(datasource)

slc loopback:model

繼承模型

base = User

繼承內建的User類來實現通用的用戶功能

loopback/common/modules/user.json

用戶系統功能

/api/users/register
/api/users/login
/api/users          //查詢用戶列表
/api/users/verify   //驗證郵件發送
/api/users/confirm  //用戶激活

數據源

從類型到模型

從數據源到用戶

配置與NODE_ENV

datasources.local.json
datasources.staging.json
datasources.production.json
#js文件也可

在common/modules/自定義model.js文件裏面添加方法
```
module.exports = function(hubuUser) {
    hubuUser.sayHi = function(callback){
            callback(null,'Hi');    //第一個參數是array
    }
    hubuUser.remoteMethod(
    'sayHi',
    {
            'accepts':[],   //接受請求,過濾請求,組裝函數
            'returns':[     //通過回調函數返回
                    {
                            'arg':'result',
                            'type':'string'

                    }
            ],
            'http':{
                    'verb':'get',
                    'path':'/say-hi'
            }



    });

};

```
在common/modules/自定義model.json裏面修改權限主要是在acls裏面配置
```
    {
    "name": "hubuUser",
    "base": "PersistedModel",
    "idInjection": true,
    "options": {
    "validateUpsert": true
    },
    "properties": {
    "fullname": {
      "type": "string"
    },
    "age": {
      "type": "number"
    }
    },
    "validations": [],
    "relations": {},
    "acls": [
        {
                "principalType":"ROLE",         //類型
                "principalType":"$everyone",    //id
                "permission":"ALLOW",           //權限
                "property":"sayHi"              //權限給哪個方法
        }

    ],
    "methods": {}
    }

```

使用github、google、qq、微博等賬號登陸

郵箱驗證

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章