nodejs学习手记(2)

本文介绍了使用Node.js的Express框架结合EJS模板引擎来构建动态网页的方法。内容覆盖了如何配置Express应用以使用EJS作为默认模板引擎,并展示了如何通过`res.render()`方法将动态数据传递给HTML模板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、微博等账号登陆

邮箱验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值