当前位置: 首页 > 科技观察

开始使用AngularJS+ExpressJS6月份开始搭建网站

时间:2023-03-16 20:59:11 科技观察

,接到了一个UI开发相关的新任务,使用AngularJS、ExpressJS等技术。所以周末顺便学习一下新技术。群内产品的UI结构如下:前端主要使用AngularJS框架,此外还有很多Bootstrap和JQuery提供的控件,后台主要是ExpressJS搭建的WebServer,即与Nginx一起使用非常方便。因此,在项目不忙的时候,有时间也有兴趣去学习一下AngularJS和ExpressJS。同时实现了最简单的AngularJS+ExpressJS网站示例。1.AngularJSAngularJS是由谷歌员工开发,然后由谷歌维护的项目。官方网站是:https://angularjs.org/。上面有详细的文档,可以下载最新的1.4版本和稳定的1.3.15版本。简单来说,AngularJS是一个工作在前端的Javascript框架。它的两大特点是通过指令扩展Html,通过表达式将数据绑定到Html。同时提供controller、Filter、Factory等服务。因为AngularJS作用于前端,所以可以和任何服务器技术结合,和ExpressJS是很好的结合。AngularJS的诞生是为了解决在静态网页上操作DOM的缺点,适合开发动态Web应用程序。AngularJS的原理可以通过下图来理解:入门学习的网上学习资料也很多,这里就不赘述了。但是让我介绍一下AngularJS的一些重要概念:1.控制器要动态操作网页中的数据,我们可以为Html页面编写控制器。控制器本质上是一种Javascript方法。例如,我们可以针对每个HTML页面,编写相应的Javascript方法作为控制器来控制页面中的数据。如下:index.html

Hello{{name}}

这是AngularJS控件写的页面,指定AngularJSapp为myApp,注意表达式,{{name}},name是一个动态变量。名字的价值从何而来?就是在对应的controller中给name赋值,让用户在访问index.html页面时可以看到name的真实值。controller.js//声明依赖过滤器和服务的angularJS级模块varmyControllers=angular.module('myControllers',[]);//controllermyControllers.controller('indexControl',['$scope',function($范围){$scope.name="凯文";}]);在controller.js中,我们定义了一个indexControl控制器,它为index.html中的name赋值。当然我觉得在真正的开发中,controller的代码肯定是很多的。建议像indexContrl这样的每个controller单独放在一个JS文件中,这样既规范又便于维护。那么有一个问题,indexControl和index.html有什么关系呢?AngularJS怎么知道我们要用indexControl来控制index.html呢?这里有两种方式,一种是直接在index.html中指定,

Hello{{name}}

但是这种方式,对于大型的网站,太麻烦了。推荐使用另一种方法,即使用AngularJS的另一个Moduleng-route进行路由控制,在同一个文件中为不同的路径定义各自的controller。如下:myAngularApp.js//DeclareangularJSlevelmodulewichdependssonfilters,andservicesvarmyApp=angular.module('myApp',['ngRoute','myControllers']);//routemyApp.config(['$routeProvider',function($routeProvider){$routeProvider.when('/',{templateUrl:'index.html',controller:'indexContrl'}).otherwise({redirectTo:'/404'});}]);值得注意的是,必须在myAppmoudle中引用ng-route,同时文件中必须引用angular-route.js文件,否则无法运行。这样index.html页面中的数据就会被indexContrl函数控制。这里只是一个简单的Demo,更多功能请参考文档。2.FilterAngularJS提供了filter函数,其实质就是我们定义一些常用的方法来格式化页面输出的数据。很方便。建议在开发时放在单独的Filter.js文件中。3.工厂服务也允许我们将一些通用的方法定义为服务。但是所有的服务都是惰性实例化的,只有在被使用或者依赖的时候才会实例化,而且都是单例。建议在开发时放在单独的Factory.js文件中。#p#2。ExpressJS在例子的前端,我们使用AngularJS框架来开发Html页面和对应的JS文件。但是网站的后台会用到其他的技术。如果我们要使用Node.js作为后台,很简单,http.createServer即可。但在真正的网站开发中,使用ExpressJS会更合适。ExpressJS是目前最流行的基于Node.js的Web开发框架。提供session、cookie等多种模块,可以快速搭建一个功能齐全的网站。ExpressJS本质上是基于Node.js内置的http模块开发的。ExpressJS和Nginx反向代理服务器的结合非常方便。这里ExpressJS的一个重要概念就是middleware中间件,它可以加载使用ExpressJS提供的很多模块或者其他模块作为中间件。它的作用是处理http请求。一个中间件处理完后,可以传递给下一个中间件。可以使用NPM下载ExpressJS。npminstallexpress如果你想快速使用ExpressJS搭建网站后台,推荐一个叫express-generator的工具,它可以帮助你快速搭建一个ExpressJS项目并生成必要的文件。npminstall-gexpress-generator但是到这里,我发现expressgenerator用到的模块还有很多,比如视图渲染的jade等等,有点复杂。我还是参考它,自己搭建一个最简单的ExpressJS项目。路径如下:public文件夹包含UI相关文件,如下:app.js是ExpressJS的起始文件,相当于main函数。app.jsvarexpress=require('express');varhttp=require('http');varpath=require('path');varroutes=require('./routes/index');varapp=express();app.use(express.static(path.join(__dirname,'public')));app.use('/',routes);http.createServer(app).listen(3000);这里使用ExpressJS创建一个server,注意第8行代码的作用是指定页面的文件夹,第10句的作用是在routes文件夹下的index文件中定义了路径/的路由信息??。这两句话的顺序不能错。路由/索引varexpress=require('express');varrouter=express.Router();/*GETHomepage.*/router.get('/',function(req,res,next){res.render('index',{title:'Express'});});module.exports=router;表示访问路径/,到public文件夹中找到index.html文件。这样nodeapp.js一条命令就可以挂网站了。3.示例结果和总结***访问网站,可以看到正确的结果,网站已经暂停,页面中的变量已经被AngularJS控制器替换为正确的数据。这是一个小问题。在最初的实验中,页面上的变量根本没有被替换。改了AngularJS库,改了controller的写法,花了好几个小时,都没用。***查了资料和文档,发现只有页面中有ng-view才会起作用。原来是这样的。..坑爹啊。..本文只介绍一个非常简单的AngularJS+ExpressJS建站实例。我希望对你有用:-)