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