过年的时候学习了一下Express,web框架种类感慨真是十分多,能用得舒服挖坑不少。这个很大程度和业务有关。能够用好,花费不少时间。目前因为有项目需要。只能在这块和php多编写多一点才行。
Express 是nodejs下一个web开发框架,使用它做网站和web相关的服务对一个全站而言十分容易。不过在学习一个框架时候,这个框架要安装配套很多才能算用得熟悉。npm这种包管理器好处很明显,想要就加进来,不好的地方。这么多,对刚接触是一个新手需要挖坑的地方,还完全没概念,要用那些配搭。不知道如何去搭配
查看了一下视频教程。真正能够用熟悉了,还要了解web很多基础,模板引擎,ejs css,单纯express这个框架还要安装其他库,像redis,session,其他中间件,芒果DB 和mysql,还有很多还没知道。
用到的库还有session,上传图片类。总之比较多,nodejs有个好处是对全栈开发和前端配合得比较好。这一点是比较有优势。不好的地方,es6这个标准,查看了一下特性新增比较多。接触异步编程,还要了解es6的一些用法,用起来比较吃力理解这些。搞不懂js要学哪些。
记录一下一些笔记
express 在默认模板是jade,代码提示没那么友好。要修改ejs可以间接地使用html来写。ejs也非常方便注入模板中去。修改一些里面的代码,可以变成html了。
var engine = require('ejs-mate'); app.engine('html', engine); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'html');创建Express模板的时候,有一个index.js和user.js文件,观看了一些视频教程,其实用一个web_routes.js 可以在里面编写。将一些定义的路由都写在这里就好了。
为了简化路由文件的简洁性,这部分只是定义get post操作,实际上的逻辑会交给另外一个模块处理。Controller控制器去处理这块。
var express = require("express"); var router = express.Router(); var Index = require("../controller/IndexController"); var Sign = require("../controller/SignController"); router.get("/",Index.index); router.get("/about",Index.about); router.get("/signin",Sign.signin); module.exports = router;路由回调的函数,可以将其托管到其他地方书写,用于处理逻辑功能。 显示页面,查询数据,和数据库连接,返回列表数据等。
/** * IndexController.js Created by Administrator on 2017/1/29. */ exports.index = function (req, res) { res.render('Index/index.html',{title:"express"}); } exports.about = function (req, res) { res.render('about.html'); }这样看起了就像一个静态类引用那些方法。
express可以配合ejs用起来比较方便,可以在网页那里编写一下js语句,循环,判断等。当在controller 控制器处理好的数据逻辑后,可以给其html模板传递一些变量过去,方便地使用将变量和Html结合一起。配合条件语句。
其实这个处理还是比较古老一点,但还是凑效。php也会这样子。ejs用起来不错。
<% if(x>6) {%> <div>我看到了</> <%}%>暂时还没用到那么高级 的地方!这块观看了一些视频有讲解,真的用熟悉了,还是很不错。挖潜一个web框架的所有优缺点。
在一些情况下,项目需要定义全局的变量来使用。而express提供了这个机制。可以使用如下的方法来获取
var express = require('express'); var app = express(); app.locals.message= "定义一个全局变量";这个message变量的值就可以在模板引擎中使用
a.html里面可以这样编写 引用其变量。
<div class="alert alert-error"> <strong><%=message%></strong> </div>npm install eventproxy –save 安装这个事件代理,可以监听事件处理事务。
eventproxy 事件监听
var eventproxy = require('eventproxy'); var ep = new eventproxy(); ep.on('error', function(msg){ res.render('reg', {error: msg}); }) ep.emit('error', '注册信息错误');//发送事件 //或者使用all监控多个事件 ep.all('success', 'cout', function(result, allcout){ }嵌入模板中的变量,用于错误的时候将这部分div显示出来。 当中结合了bootstracp的样式。
<% if(typeof(error) != 'undefined' && error){%> <div class="alert alert-error"> <p><%=error%></p> </div> <% }%>