用express搭建网站

news/2024/5/4 11:30:20/文章来源:https://blog.csdn.net/weixin_33920401/article/details/89292179

先建个简单的服务器

  • 当然你先得安装express npm install express

//使用express,如果这里的代码复制后运行不了请移步我的github下载源码,顺手star给我个小星星鼓励哈
//http://github.com/sally2015/express-project
// npm install  运行node main 后访问loaclhost:3000
var express = require('express');
var app = express();
app.set('port', process.env.PORT || 3000);app.get('/',function(req, res){res.send('home');});
app.use('/about',function(req, res){res.send('about');});
app.use(function(req, res){res.send('404');});app.use(function(req, res, next){res.send('500');
});app.listen(app.get('port'), function () {console.log('Express started on http:localhost'+app.get('port'));
});
  • app.use(function(req,res,next){})默认匹配的路由是‘/’,多个use要使用next()方法,但是使用了,res.end()或者res.send()就不能使用next到达下一个use了

  • app.get()是添加路由的方法,忽略大小写,反斜杠,进行匹配时不考虑查询字符串

//不使用express你可能要这么写
/*
* var http = require('http');
* var server =  http.createServer(function(req, res){
*    if(req.url === '/'){res.setHeader('Content-type','text-plain');res.write('……');&&res.end();
*   }
*}).listen(3000,'localhost');
*/
  • 对定制的404页面和500页面的处理与对普通页面的处理有所区别,用的不是app.get,而是app.use。app.use是express添加中间件的一种方法

  • express中路由和中间件的添加顺序至关重要,如果把404处理器放在所有的路由上面,普通页面的路由就不能用了

  • express能根据回调函数中的参数区分404和500处理器

使用handlebars

  • (defaultLayout:'main')意味着除非你特别指明否则所有的视图都是这个布局

var handlebars = require('express3-handlebars') //现在已经重命名为express-handlebar了,由于牵一发可能要动全身,我这里就不改了
.create({ defaultLayout: 'main', // 设置默认布局为
});app.engine('handlebars', handlebars.engine); // 将express模板引擎配置成handlebars 
app.set('view engine', 'handlebars');
  • 创建一个views/layouts/main.handlebars文件

<html lang="en">
<head>

<meta charset="UTF-8">
<title>Document</title>

</head>
<body>

{{{body}}}

</body>
<html>

- {{{body}}}注意这里是三个大括号,这个表达式会被每个视图自己的html取代
- 分别创建首页、关于、404、500页面,后缀名都是handlebars- ```html
views/home.handlebars
=> <h1>welcome to home</h1>
views/about.handlebars=><h1>welcome to about</h1>
views/404.handlebars=><h1>not found - 404</h1>
views/500.handlebars=><h1>500 server error</h1>

视图和静态文件

  • express靠中间件处理静态文件和视图,中间件是一种模块化手段,使请求处理更加容易

  • static中间件可以将一个或多个目录指派为包含静态资源的目录,其中的资源不经过特殊处理直接发送到客户端

app.use(express.static(__dirname+'/public'));
//现在所有文件都可以相对public直接进行访问,例如public下面有一个img文
//件夹,那么在handlebars中(不需要理会在handlebars的目录结构)直接访问
//路径/img/logo.png
  • 视图和静态资源的区别是它不一定是静态的,html可以动态构建

  • 在项目下建一个public的子目录,应该把static中间件加载所有路由之前

向handlebars里传递参数

var args = 'its a arguments';//虚拟一个参数
//修改此时的about路由
app.get('/about', function(req,res){res.render('about', {args:args});
});
  • 修改about文件

Paste_Image.png

  • 此时访问就会得到下面的结果

Paste_Image.png

以上代码在https://github.com/sally2015/... ch1
---------------------------------------------分割线----------------------------------------------

ch2讲讲怎么快速、可维护的开发

使用自定义模块

  • ch1为了传递参数在main.js里面定义了一个虚拟数据,为了将数据分离出来,在根目录下定义一个lib目录,放置一个数据模块m_data.js

var args = 'its a arguments';//虚拟一个参数exports.getData = function(){return args;
}
  • main.js

var m_data = require('./lib/m_data.js');
app.get('/about', function(req,res){res.render('about', {args:m_data.getData()});
});

使用nodemon自动重启服务器

  • 每次修改main文件都要ctrl+c停止再运行很累,使用nodeman每次修改都会帮我们重启服务器

  • 使用也非常简单,npm install nodemon -g,运行nodemon main

页面测试

  • 需要一个测试框架Mocha ---- npm install mocha --save-dev 这里dev的意思是只在开发时依赖

  • mocha是要运行在客户端的所以把mocha资源放在public目录下

    • public/vendor

    • => node_modules/mocha/mocha.js

    • => node_modules/mocha/mocha.css

  • 测试通常需要一个assert函数

    • npm install chai --save-dev

    • node_modules/chai/chai.js => public/vendor

  • 不让测试一直运行

    • 因为拖慢网站的速度,用户也不需要看到测试结果

    • 期望的情况是在url后面加上?test=1才加载测试页面

  • 定义中间件来检测查询字符串中的test=1,放在所有路由之前

  • 如果test=1出现在任何页面的字符串查询中,属性res.locals.showTests就会被设为true

  • res.locals对象是要传给视图上下文的一部分

app.use(function(req, res, next){res.locals.showTests = app.get('env') !== 'production' && req.query.test === '1';next();
});

引入测试框架

  • 修改main.handlebars(以后简写main),修改head

<head><title>Meadowlark Travel</title>{{#if showTests}}<link rel="stylesheet" href="/vendor/mocha.css">{{/if}}<script src='//code.jquery.com/jquery-2.0.2.min.js'></script>
</head>
  • 这里在head引入jquery是为了方便测试

  • 在</body>之前引入mocha和chai,还需引入一个qa/global-test.js脚本

{{#if showTests}}<div id="mocha"></div><script src='/vendor/mocha.js'></script><script src='/vendor/chai.js'></script><script>mocha.ui('tdd');var assert = chai.assert;</script><script src='/qa/tests-global.js'></script>{{#if pageTestScript}}<script src='{{pageTestScript}}'></script>{{/if}}<script>mocha.run()</script>{{/if}}
  • 创建public/qa/tests-global.js全局测试脚本

suite('Global Tests', function(){test('page has a valid title', function(){assert(document.title && document.title.match(/\S/) && document.title.toUpperCase() !== 'TODO');});
});
  • 访问localhost:3000没有任何变化,但是访问localhost:3000?test=1,你会发现加载了测试的文件帮你做的这些东西

Paste_Image.png

  • 针对about页面进行测试

    • 这里假设测试确保有总有一个指向联系我们页面的链接,创建一个public/qa/tests-about.js

suite('"About" Page Tests', function(){test('page should contain link to contact page', function(){assert($('a[href="/contact"]').length);});
});
  • 在main.js上改变路由/about的参数

    app.get('/about', function(req,res){res.render('about', {args:m_data.getData(),pageTestScript:'/qa/tests-about.js'});
    });
  • 现在刷新页面about会有一个错误的断言

-

  • 只要about模板中有一个链接,这个错误测试断言就会消失

  • 例如contact us

测试通过

使用局部组件

  • 场景定义一个天气组件,在任何页面都可以调用,这样的需要重复调用的可以用局部文件实现

    • 新建一个views/partials/weather.handlebard

<div class="weatherWeight">{{#each weather.locations}}<div class="location"><h3>{{name}}</h3><a href="{{forecastUrl}}">{{weather}},{{temp}}</a></div>{{/each}}
</div>
  • 在weatherData.js中放入虚拟数据

function getWeatherData(){return {locations:[{name:'广州',forecastUrl:'https://github.com/sally2015',weather:'广州的温度情况',temp:'温度'},{name:'深圳',forecastUrl:'https://github.com/sally2015',weather:'深圳的温度情况',temp:'温度'},{name:'珠海',forecastUrl:'https://github.com/sally2015',weather:'珠海的温度情况',temp:'温度'}]}
}
exports.getWeatherData = getWeatherData
  • 创建一个中间件给res.locals.weather添加数据


//给res.locals.weather添加数据
app.use(function(req, res, next){if(!res.locals.weather){res.locals.weather = {};}res.locals.weather = m_weatherData.getWeatherData();next();
});
  • 将组件放在主页home上

<h1>welcome to home</h1>
{{>weather}}
  • 语法{> partialname}可以让你在视图中包含一个局部文件,express-handlebars会在views/partials寻找

  • 你可以将这个语法放在任何你需要的页面上

现在的home效果

客户端使用模板和动态获取数据

  • 客户端使用handlebars需要加载handlebars文件,你可以从node_moudles里面找,像正常文件一样引入即可

  • 定义一个view/partials/ajaxtest.handlebars文件

<script id='ajaxtest' type='text/x-handlebars-template'>Marry hadd a little <b>\{{animal}}</b>its<b>\{{bodyPart}}</b>was <b>\{{adjective}}</b>as <b>\{{noun}}</b>
</script>
<button id='btn'>动态获取数据<tton>
<div id="content"></div>
<script>$(document).ready(function(){var template = Handlebars.compile($('#ajaxtest').html());$('#btn').click(function(){$.ajax('/data/ajaxtest',{success:function(data){$('#content').html(template(data));}});});});</script>
  • 在main.js中设定接口

app.get('/data/ajaxtest', function(req, res) {res.json({animal:'dog',bodyPart:'tail',adjective : 'sharp',noun : 'run'});
});
  • 在你想要的视图里面加入{{>ajaxtest}}

  • 这时候当你点击按钮就会请求到数据,注意接口使用的方法是json

返回数据
--------------------分割线------------------------------------ch2 https://github.com/sally2015/...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_712621.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐学习网站

云计算的博客http://www.chenshake.com/cloud-computing/ 陈沙克http://cloudman.blog.51cto.com/all/10425448/page/5 CloudMan 微信公众号&#xff1a;cloudman6http://man.linuxde.net/ http://www.ansible.com.cn/docs/intro_patterns.html http://www.tiejiang.org/7325.h…

网站服务器修改内容,网站被收录后内容还可以修改吗?

被搜索引擎收录后的文章还可以修改吗?对于这个问题&#xff0c;不同的站长有不一样的意见&#xff0c;因此每个人对于网站SEO优化的认知都是不同的&#xff0c;因此看待这个问题思考的角度也会不一样&#xff0c;那么被收录后的网站内容还可以修改吗?下面就一起来了解一下。1…

小网站服务器空间,小型网站空间服务器

小型网站空间服务器 内容精选换一换使用主机迁移服务前&#xff0c;请参考以下步骤准备好账号、权限及源端、目的端服务器环境。已在华为云注册账号&#xff0c;并完成实名认证。已获取账号迁移权限。已获取目的端账号的AK/SK。账号余额大于等于100元(充值、代金券皆可)。源端操…

其他网站博客收藏

为什么80%的码农都做不了架构师&#xff1f;>>> Oracle Linux 5.8安装Oracle 11g RACLinux监控命令图文详述Docker 终极指南Linux crontab 命令详细用法及示例RAC环境数据库重启实例Python 的 OptionParser 模块使用Oracle 的 imp ,exp 命令实现数据的导入导出ORAC…

《HTML5移动Web开发实战》—— 1.6 在移动网站中使用HTML5

本节书摘来异步社区《HTML5移动Web开发实战》一书中的第1章&#xff0c;第1.6节&#xff0c;作者&#xff1a;石川&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.6 在移动网站中使用HTML5 HTML5移动Web开发实战适用浏览器&#xff1a;所有 现在我们开始…

网站服务器 凭证,登录云服务器的凭证是什么

登录云服务器的凭证是什么 内容精选换一换检查头显是否连接到平台并获取可连接GPU服务器的EIP。检查云服务器安全组是否放通对应端口。如果云服务器状态由“闲置”变为“正常”&#xff0c;表示头显已连接至VR云渲游平台&#xff0c;请直接跳转至2。如果云服务器状态一直处于“…

div区域内容抓取_企业微信群机器人应用:使用python从网站抓取行业资讯并定时推送...

在企业经营过程中&#xff0c;及时了解行业相关信息&#xff08;市场动态、竞品策略、行业数据等等&#xff09;是非常必要的。通常情况下&#xff0c;商品部门、营销部门、市场部门可能都会安排专门的人员定期进行这些信息的搜集、整理&#xff0c;再进行内部的分享。不过在大…

SEO优化:WordPress发布文章主动推送到百度,加快收录保护原创

工作实在太忙&#xff0c;也没时间打理网站。最近公司额外交待了一些网站 SEO 方面的优化任务让我关注&#xff08;这就是啥都要会、啥都要做的苦逼运维的真实写照了...&#xff09;。 于是抽空看了下百度站长平台&#xff0c;至少看到了2个新消息&#xff1a; ①、百度已全面支…

网站提速-缓存技术(4)

缓存技术 memcached基本概念 Memcached是danga的一个项目&#xff0c;最早是为LiveJournal 服务的&#xff0c;最初为了加速 LiveJournal 访问速度而开发的&#xff0c;后来被很多大型的网站采用。 官方网站: www.danga.com 和 memcached.org Memcached是一个高性能的分布式的…

2007最优秀的CSS网站设计

很多人不知道的是&#xff0c;我同样是 Best Web Gallery 和 N.Design Studio“背后”的人. 2006年&#xff0c;我创建了Best Web Gallery,作为我发现的最好的 CSS and Flash 网站的收藏.我非常高兴这个项目让我有机会是我的设计思想与主流保持一致。在过去的一年里&#xff0c…

html提高搜索排名优化,网站搜索排名,为什么很难提升,该如何提高?

在日常SEO工作中&#xff0c;SEO人员经常遇到的一个问题就是&#xff1a;做了很多优化工作&#xff0c;自己的网站搜索排名&#xff0c;几乎是纹丝不动&#xff0c;很难提升&#xff0c;这对于SEO新人&#xff0c;是一项心态的考验&#xff0c;很多人开始焦急&#xff0c;不知道…

高性能网站建设之减少Http连接数

关于CSS背景图合并工具&#xff0c;请大家参看随笔&#xff1a;Css背景图合并工具功能增强&#xff08;V0.1&#xff09; 在对大访问量网站进行性能优化时&#xff0c;其中有一点是尽量减少http连接数&#xff0c;道理很明了&#xff0c;减少了单个PV的http连接数&#xff0c;…

ASP.NET网站还是ASP.NET Web应用程序?

当我在Visual Studio中启动新的ASP.NET项目时&#xff0c;可以创建一个ASP.NET Web应用程序&#xff0c;也可以创建一个ASP.NET网站。 ASP.NET Web应用程序和ASP.NET网站之间有什么区别&#xff1f; 我为什么要选择一个&#xff1f; 根据我使用的Visual Studio版本&#xff0…

php有ssm框架吗,SSM框架-企业门户网站-1-工程构建

刚入职一个星期&#xff0c;现在才有时间开始这个框架的博客&#xff0c;我自己接的项目&#xff0c;第一次拿商业项目开源&#xff0c;大神们可能看着会觉得这不怎么样吧&#xff0c;其实我上线的项目是PHP写的&#xff0c;我只是在这个项目的基础上&#xff0c;改为了SSM框架…

asp.net三层架构制作新闻管理_为什么使用PHP制作网站?

现在网站制作可以使用多种语言。为什么我们选择PHP进行网站制作&#xff1f; 北京东浩联创科技有限公司.是一家高端网站制作公司&#xff0c;在业界处于领先地位。本文东浩联创的小编告诉大家我们为什么使用PHP进行网站制作&#xff1f;它的优势在哪里&#xff1f;1&#xff0c…

linux php 网站计数器,PHP图形数字计数器的实现

php图形数字计数器&#xff0c;是现在网站中经常使用的方法&#xff0c;它的基本功能是针对单个用户而言&#xff0c;登录网站后计数器的值加一&#xff0c;用户刷新网页&#xff0c;计数器的值不会增加。这一点功能的实现是利用session来实现的&#xff0c;当用户登录时&#…

OSChina 初十二乱弹 ——网站都挂了,巴叔被安排出去度假

2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单&#xff08;2018&#xff09;请戳&#xff08;这里&#xff09; 【今日歌曲】 莱布妮子 &#xff1a;分享Scott Shields的单曲《Short Change Hero》 《Short Change Hero》- Scott Shields 手机党少年们想…

【大学生必备神器网站】免费论文下载、免费2T网盘、各类免费课程、在线高数引擎...收藏了4年的宝藏学习网站最全の整理推荐!

前言&#xff1a; 大学大学&#xff0c;就是“大不了自己学”。四年大学本科经历让我认识到一个道理&#xff1a;大部分情况下&#xff0c;人与人之间的差距就在于信息与资源上。互联网时代推崇“开源”与“自由”&#xff0c;但可惜的是&#xff0c;由于垃圾信息过剩&#xff…

复制加网站信息的javascript代码及对应的javascript阻止命令

复制加网站信息的javascript代码 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"xml:lang"zh-cn…

这些小众又有趣的计算机自学网站,不再私藏了!

计算机的学习总少不了用“可视化”的方式去理解&#xff0c;今天推荐我收藏夹里相当不错的网站。 1. VisALgo - 数据结构和算法动态可视化 地址&#xff1a;https://visualgo.net/zh 网站提供不下20种经典的数据结构与算法可视化迭代过程&#xff0c;十分适合刚刚接触数据结构…