使用Express和AbsurdJS的Node.js应用
时间:2023-03-20 16:12:52
科技观察
有很多新技术吸引着越来越多的开发者,Node.js就是其中之一。主要是因为它是JavaScript驱动的,很多人感兴趣。在本教程中,我将教您如何将AbsurdJS与Express一起使用。Express是一个流行的Node.js框架,而AbsurdJS比较新,希望大家看完后觉得有用。本文中提供的源代码可以从这里下载。简介正如我所提到的,Express很受欢迎。因为它是最早的Node.js框架之一。它完成所有琐碎的事情,如路由、参数解析、模板化和向浏览器发送响应。它的库基于Connect提供的中间件架构,更好的封装了原生的Node.js。AbsurdJS最初是一个CSS预处理器。目的是为CSS开发人员带来更好的灵活性。它采用纯JavaScript代码并转换为CSS。大家对它的反馈还是比较正面的,我也在努力继续完善它。现在它不仅可以预处理CSS,还可以预处理HTML。它接受JSON和YAML并成功导出以供客户端使用。步骤为了让***做的项目运行起来,我们需要安装Node.js。只需打开nodejs.org并单击绿色的大“安装”按钮。下载安装完成后,可以调用Node.js脚本,使用npm(Node的包管理器)安装依赖包。为您的项目创建一个新文件夹,并在其中创建一个空的“package.json”文件。包管理器将使用此文件作为起点来安装我们需要的包。我们只需要两个包,所以json文件应该是这样的:{"name":"AbsurdJSAndExpress","description":"AbsurdJS+Expressapp","version":"0.0.1","dependencies":{"express":"3.4.4","absurd":"*"}}当然这里可以配置的参数还有很多,但是为了举例方便,还是先按照上面的配置吧。打开终端,找到Package.json所在的目录,执行:npminstall会在当前目录下生成一个node_modules文件夹,并自动下载Express和AbsurdJS。运行服务器使用Express,您只需几行代码就可以运行一个http服务器。varexpress=require('express'),app=express();app.listen(3303);console.log('Listeningonport3303');将上面的代码保存为app.js并运行:nodeapp.js控制台应该显示“Listeningonport3303”。在浏览器中打开http://localhost:3303/你会看到:CannotGET/不用担心,这是正常的,因为我们还没有添加路由。添加路由Express提供了一个友好的API来定义URL路由。我们在这里简单的添加一个,将下面的代码粘贴到app.js中。app.get('/',function(req,res,next){res.setHeader('Content-Type','text/html');res.send("application");});这里有几件事。.get方法的第一个参数定义了路径;第二个参数是处理请求的方法,它接受三个参数——request、response、next。这里的好处是我们可以传入多个函数,它们将一个接一个地被调用。我们需要做的就是执行next(),否则不会调用next方法。例如:app.get('/',function(req,res,next){console.log("dosomeotherstuffhere");next();},function(req,res,next){res.send("application");});路由定义中的一个常见做法是添加一些可重用的任务作为中间件。例如,我们有两种内容类型,HTML和CSS。使用下面的方法更灵活。varsetContentType=function(type){returnfunction(req,res,next){res.setHeader('Content-Type','text/'+type);下一个();}}app.get('/',setContentType("html"),function(req,res,next){res.send("application");});如果我们需要提供CSS,只需使用setContentType("css")。提供HTML许多Express教程和文章都介绍了一些模板引擎。通常是Jade、Hogan或Mustache。然而,使用AbsurdJS我们不需要模板引擎。我们可以用纯JavaScript编写HTML。更具体地说,使用JavaScript对象。让我们从实施着陆页开始。新建文件夹pages,在里面新建landing.js文件。我们使用的是Node.js,因此该文件应包含:module.exports=function(api){//...}请注意,返回的函数接受对AbsurdJSAPI的引用。这正是我们想要的。现在添加一些HTML:module.exports=function(api){api.add({_:"",html:{head:{'meta[http-equiv="Content-Type"content="text/html;charset=utf-8"]':{},'link[rel="stylesheet"type="text/css"href="styles.css"]':{}},body:{}}});}由“_”属性添加的字符串在编译为HTML时不会被转换;其他属性各自定义一个标签。还有其他方法可以定义标签属性,但我认为上面的方法更好。这个想法取自Sublime的Emmet插件。编译后会生成:
本教程只有一页,但实际上您可以在多个页面中使用相同的HTML。此时比较合理的做法是将这部分代码移动到外部文件中,需要的时候引用。当然,这里也可以使用可重复的模板。创建文件/pages/partials/layout.js:module.exports=function(title){return{_:"",html:{head:{'meta[http-equiv="Content-Type"content="text/html;charset=utf-8"]':{},'link[rel="stylesheet"type="text/css"href="styles.css"]':{},title:title},身体:{}}};};这里实际上是一个返回对象的函数。因此,前面的landing.js可以修改为:module.exports=function(api){varlayout=require("./partials/layout.js")("Homepage");api.add(布局);}可以看到现在,布局模板接受了一个标题变量。这允许动态生成一部分内容。#p#下一步是给body标签添加内容。非常简单,因为一切都是普通的JavaScript对象。module.exports=function(api){varlayout=require("./partials/layout.js")("主页");layout.html.body={h1:"Pagecontent"}api.add(layout);}生成的结果:
HomepagePagecontent
这篇文章的代码看起来很短,不完整,因为文章如果写全就太长了。接下来我只介绍构建无序列表的思路,因为这里比较有意思。其余部分与layout类似,此处不再赘述。下面是生成无序列表的代码片段。
标签:module.exports=function(data){varhtml={ul:[]};for(vari=0;item=data[i];i++){html.ul.push({li:item});}返回值;这里只有一个ul属性用于定义一个对象。ul实际上是一个用列表中的项目填充的数组。varlist=require("./partials/list.js");varlink=require("./partials/link.js");列表([链接(“http://krasimir.github.io/absurd”,“Officiallibrarysite”),链接(“https://github.com/krasimir/absurd”,“Officialrepository”)]);link也是一个片段,像这样:module.exports=function(href,label){return{a:{_attrs:{href:href},_:label}}}会合并生成:
- Officiallibrarysite
- Officialrepository
现在,假设我们有一堆可以使用的片段。如果它们写得足够灵活,它们只需要创建一次并在项目之间传递。AbsurdJS非常强大,只要我们有一组足够好的预定义标记,我们就可以快速且更具描述性地编写HTNL标记。***,HTML完成后,我们只需编译并发送给用户。因此,对app.js的一个小改动可以让我们的应用程序响应正确的标记:varabsurd=require("absurd");varhomePage=function(req,res,next){absurd().morph("html").import(__dirname+"/pages/landing.js").compile(function(err,html){res.send(html);});}app.get('/',setContentType("html"),homePage);提供CSS和HTML类型,首先在app.js中为style.css添加路由。varstyles=function(req,res,next){absurd().import(__dirname+"/styles/styles.js").compile(function(err,css){res.send(css);});}应用程序。get('/styles.css',setContentType("css"),styles);使用JavaScript定义CSS。任何东西都可以放在一个分割的Node.js模块中。让我们创建/styles/styles.js并添加代码:module.exports=function(api){api.add({body:{width:"100%",height:"100%",margin:0,padding:0,fontSize:"16px",fontFamily:"Arial",lineHeight:"30px"}})}一个简单的样式控件。请注意,带有破折号的属性被重写为驼峰式大小写。否则,无法创建有效对象并发出警告。现在假设您要控制
和标签的样式。它们都是标题,具有相同的颜色和字体;但大小不同。通过下面的方法,AbsurdJS会智能的输出正确的样式。vartitle=function(){return{颜色:"#2C6125",fontWeight:"normal",fontSize:"40px",fontFamily:"Georgia",padding:"20px10px"}}api.add({h1:title(),h2:[title(),{fontSize:"30px"}]});输出结果:h1,h2{color:#2C6125;字体粗细:正常;字体系列:格鲁吉亚;填充:20px10px;}h1{字体大小:40px;}h2{字体大小:30px;预处理器收集只定义一次的相同样式,并为不同的样式创建新的定义。结论如果您计划使用Node.js,Express是最好的起点之一。它不是超级强大,但仍然很好用。它具有开发Web应用程序所需的基本元素。那么扩展一下,使用AbsurdJS会给开发带来很多乐趣,因为整个应用都是用纯JavaScript编写的。ResourcesExpress官方网站–http://expressjs.com/ExpressGitHubRepository–https://github.com/visionmedia/expressAbsurdJS官方网站和在线编译器–http://absurdjs.comAbsurdJSGitHubRepository–https://github.com/krasimir/absurd----------------------------原文链接:KrasimirTsonev翻译:伯乐在线-JawardHuaTsai翻译链接:http://blog.jobbole.com/73031/