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": {}
}
```