Nodejs学习笔记(三)——一张图看懂Nodejs建站

news/2024/5/8 21:46:05/文章来源:https://blog.csdn.net/weixin_33739646/article/details/93834306

前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广。

通俗解释上面的胡言乱语:还没学会爬,就学起走了?!

 

继上篇《Nodejs学习笔记(二)——Eclipse中运行调试Nodejs》之后,代码编写环境就从Sublime转战到Eclipse下,感觉顺手多了。于是就跟着Scott老师学起了Nodejs建站的课程(推荐大家点进去看看),踏上了未爬先走的路子。

作为一个白里透白的小白来说,今天主要记录下如何用Nodejs搭建一个小小的网站,以及自己对于这种Nodejs建站的运行逻辑的理解,还有在建站过程中需要安装一些模块等遇到的问题,也是借此机会梳理下思路。

 

  1. 创建项目

    1.1 鉴于前两篇的努力,现在已经可以在Eclipse中创建一个Node Project了。所以首先要创建一个Node工程,创建好了如下所示,基本是空空如也。

 

   1.2 随后要做的就是将项目包装成一个express模样的project并且安装依赖的模块

  进入到项目的上级目录,执行express imooc_1命令:

  再进入到项目目录下,执行npm install命令

   1.3 此时再去刷新Eclipse中项目imooc_1,就可以看到新生成的文件和新的项目结构

   其中app.js是入口文件,views目录下放的是视图文件routes负责路由public放的是一些css等文件node_modules下面是已安装和要安装模块的存放位置package.json是项目模块依赖文件

 

  2.代码编写

  为了不把整个项目讲的云里雾里的,这里先上文件(注:这里的代码主要参考了Scott老师以及一位兄弟的git上的代码,在此谢过^_^)

  项目的各文件目录结构如下

 

  app.js

var express = require("express")//这里主要是引用所必须要的模块,当然,这些模块是需要使用"npm install 模块名"安装的
var bodyParser = require('body-parser')
var port = process.env.PORT || 3000
var app = express()app.set('views', './views/pages')//定义了一些路径和所用到的引擎
app.set('view engine', 'jade')
app.use(bodyParser.urlencoded({extended: true}))
//app.use(require('body-parser').urlencoded({extended: true}))
// app.use(express.static(path.join(__dirname,'bower_components')))
app.use(express.static(__dirname + '/views'));
app.use('/bower_components', express.static(__dirname + '/bower_components'));
app.listen(port);console.log('imooc started on port ' + port);//index page    这里以及下面皆是路由以及赋值,这里的字段如title, poster等都会在相应的jade如index.jade中用到,实际上是将这里的值传入相应的jade以渲染页面
app.get('/', function (req, res) {res.render('index', {title: 'imooc 首页',movies: [{title: "复仇者联盟2",_id: 1,poster: 'http://img31.mtime.cn/mg/2015/03/27/120537.13212993_270X405X4.jpg'}, {title: "复仇者联盟2",_id: 2,poster: 'http://img31.mtime.cn/mg/2015/03/27/120537.13212993_270X405X4.jpg'}, {title: "复仇者联盟2",_id: 3,poster: 'http://img31.mtime.cn/mg/2015/03/27/120537.13212993_270X405X4.jpg'}, {title: "复仇者联盟2",_id: 4,poster: 'http://img31.mtime.cn/mg/2015/03/27/120537.13212993_270X405X4.jpg'}, {title: "复仇者联盟2",_id: 5,poster: 'http://img31.mtime.cn/mg/2015/03/27/120537.13212993_270X405X4.jpg'}]})
})//detail page
app.get('/movie/:id', function (req, res) {res.render('detail', {title: 'imooc 详情',movie: {doctor: '乔斯·韦登',country: '美国',title: '复仇者联盟2',year: '2015',poster: 'http://img31.mtime.cn/mg/2015/03/27/120537.13212993_270X405X4.jpg',language: '英语',flash: 'http://v.youku.com/v_show/id_XODc4NDY0MjA4.html',summary: '影片讲述当钢铁侠试图启动处于休眠状态的维持和平计划时,事情出了差错。于是,在地球面临生死存亡的紧急关头时,强大的超级英雄们挺身而出承担起拯救世界的重任,他们将阻止可怕的人工智能机器人“奥创”制定恐怖计划。'}})
})
//admin page
app.get('/admin/movie', function (req, res) {res.render('admin', {title: 'imooc 后台录入页',movie: {doctor: '',country: '',title: '',year: '',poster: '',language: '',flash: '',summary: ''}})
})
//list page
app.get('/admin/list', function (req, res) {res.render('list', {title: 'imooc 列表页',movies: [{doctor: '乔斯·韦登',country: '美国',title: '复仇者联盟2',year: '2015',poster: 'http://img31.mtime.cn/mg/2015/03/27/120537.13212993_270X405X4.jpg',language: '英语',flash: 'http://v.youku.com/v_show/id_XODc4NDY0MjA4.html',summary: '影片讲述当钢铁侠试图启动处于休眠状态的维持和平计划时,事情出了差错。于是,在地球面临生死存亡的紧急关头时,强大的超级英雄们挺身而出承担起拯救世界的重任,他们将阻止可怕的人工智能机器人“奥创”制定恐怖计划。'}]})
})

  

  layout.jade

doctype
htmlhead   //这是页面的head,其中还有要用到的一些head文件如bootstrap以及jquery等meta(charset="utf-8")title #{title}include ./includes/headbody   //这是页面的body,其中有header部分以及主体的body内容,需要到相应的jade文件中访问include ./includes/headerblock content

  

   index.jade

extend ../layoutblock content.container.roweach item in movies.col-md-2.thumbnaila(href="/movie/#{item._id}")img(src="#{item.poster}",alt="#{item.title}").captionh3 #{item.title}p: a.btn.btn-primary(href="/movie/#{item._id}",role="button") 观看预告片

  

  admin.jade

extend ../layoutblock content.container.rowform.form-horizontal(method="post",action="/admin/movie/new").form-grouplabel.col-sm-2.control-label(for="inputTitle") 电影名字.col-sm-10input#inputTitle.col-sm-10.form-control(type="text",name="movie[title]").form-grouplabel.col-sm-2.control-label(for="inputDirector") 导演.col-sm-10input#inputDirector.col-sm-10.form-control(type="text",name="movie[director]").form-grouplabel.col-sm-2.control-label(for="inputCountry") 国家.col-sm-10input#inputCountry.col-sm-10.form-control(type="text",name="movie[country]").form-grouplabel.col-sm-2.control-label(for="inputLanguage") 语言.col-sm-10input#inputLanguage.col-sm-10.form-control(type="text",name="movie[language]").form-grouplabel.col-sm-2.control-label(for="inputYear") 上映年份.col-sm-10input#inputYear.col-sm-10.form-control(type="text",name="movie[year]").form-grouplabel.col-sm-2.control-label(for="inputSummary") 简介.col-sm-10input#inputSummary.col-sm-10.form-control(type="text",name="movie[summary]")

  

  detail.jade

extend ../layoutblock content.container.row.col-md-7//-embed(src="#{movie.flash}",allowFullScreen="true",quality="high",width="720",height="600" align="middle",type="application/x-shockwave-flash")video(src="#{movie.flash}",autoplay="true" width="720",height="600" ).col-md-5dl.dl-horizontaldt 电影名字dd=movie.titledt 导演dd=movie.doctordt 国家dd=movie.countrydt 语言dd=movie.languagedt 上映年份dd=movie.yeardt 简介dd=movie.summary

  

  list.jade

extend ../layoutblock content.container.rowtable.table.table-hover.table-borderedtheadtrth 电影名字th 导演th 国家th 上映时间//-th 录入时间th 查看th 更新th 删除tbodyeach item in moviestr(class="item-id-#{item._id}")td #{item.title}td #{item.doctor}td #{item.country}td #{item.year}//-td #{moment(item.meta.createdAt).format('MM/DD/YYYY')}td: a(target="_blank",href="../movie/#{item._id}") 查看td: a(target="_blank",href="../admin/update/#{item._id}") 修改td button.btn.btn-danger.del(type="button",data-id="#{item._id")删除

  

  head.jade

link(href="/bower_components/bootstrap/dist/css/bootstrap.min.css",rel="stylesheet")
script(src="/bower_components/jquery/dist/jquery.min.js")
script(src="/bower_components/bootstrap/dist/js/bootstrap.min.js")

  

  header.jade

.container.row.page-headerh1= titlesmall 重度科幻迷

 

  虽然文件不少,但是捋一捋,逻辑还是比较清楚的,下面以在浏览器中输入http://localhost:3000/从而访问index.html为例,通过一张图道出Nodejs建站以及页面访问的内部机制

  其他页面的访问,如list、detail原理与此类似,这里不在赘述。

  看明白的点个赞,没看明白的请留言,哇~~哈~哈~哈~~

 

  3. 遇到的坑

  3.1 bootstrap安装

  在安装bootstrap模块时,反反复复的不顺利。网上有说要设置git的环境变量的,也有说要在git bash里面敲命令的,但是这两种方法都没有解决我的问题。

  最后还是升级了下bower,然后安装bootstrap,成功!

 

  3.2 还有一个坑就是jade语法中的缩进,不正确的缩进导致应用无法启动,当然主要自己对jade完全不熟悉,所以吃了很多亏。

 

  4. 效果展示

  最后附上建成网站之后的各个页面:

                                               首页

                                              后台录入页

                                                      

                                                      列表页

 

                                                      详情页

以上记录了一个用Nodejs建立一个简单网站应用的过程,已经发现坑并如何填坑的励志故事。

如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

  

友情赞助

 

如果你觉得博主的文章对你那么一点小帮助,恰巧你又有想打赏博主的小冲动,那么事不宜迟,赶紧扫一扫,小额地赞助下,攒个奶粉钱,也是让博主有动力继续努力,写出更好的文章^^。

 

    1. 支付宝                          2. 微信

 

                      

 

 

转载于:https://www.cnblogs.com/bigdataZJ/p/Nodejs3.html

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

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

相关文章

USBWebServer 中文便携版 快速搭建 PHP/MySQL 网站服务器环境

如果你是一位 WEB 开发者,或正在学习网页编程,你一定会发现,每到一台新电脑上想要在本地调试测试/运行网站代码都得搭建配置一遍 WAMP (Win、Apache、PHP、MySQL) 环境简直烦透了!USBWebserver 是一款非常好用的傻瓜式本地电脑快速…

网站访问不了

最近在360浏览器访问不了菜鸟教程网站,其他网站可以访问.显示网页丢失了的错误界面 在地址栏小锁那里显示未通过验证.网上的教程一般是叫去浏览器医生解决. 最后呢下载了一个360安全卫士.扫描木马,系统修复.搞完了之后,可以了访问了.最后确定了应该是感染了木马. 最后开机在浏览…

SEO 相关知识

传统SEO 观念 换独立服务器  加硬件  减少http请求,压缩网页体积  css 放页面顶部,js 放页面底部一个中等规模网站的架构 技术角度 切换不同的 User-agent  Chrome 的 Network 面板  单个请求排查影响网速的常见原因 静态资源未做缓存  错误…

虚拟目录网站mysql出错_虚拟主机常见错误和解决

1. 500错误:访问asp网页出现以下错误:原因: 这是Asp程序常见错误提示.说明您的asp程序有问题.您要查看详细错误信息 才能够确定 到底是asp程序哪里出现了错误.解决: 在IE工具栏 选择 "工具"->"Internet 选项"->"高级"-> 取消 "显示…

java编程网站_学习Java开发必备的十个学习网站

原标题:学习Java开发必备的十个学习网站java开发是互联网行业最受欢迎的开发方式之一,具有跨平台、动态web、Internet计算的优势,所以被行业广泛接受,并推动了web的迅速发展。java是一个开发平台,有自己的架构设计和代…

linux g otl 编译库,OTL的使用_Linux编程_Linux公社-Linux系统门户网站

OTL可通过odbc,数据库本身的连接库如oci,与数据库进行交互,跨平台,跨数据库,api使用方便且仅只是个头文件,我一直都使用这个。以OTL连接Oracle 11g为例,说明下在VS中的使用方式:1. VS 编译环境设置a. 在工程项目中引入…

java 后端实现网站打开_Java后端精选技术:分布式锁的多种实现方式

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只…

html 图片灰色,网站变灰色兼容代码 包括图片 支持所有浏览器

一般在全国哀悼日,大地震的日子,清明节,我们都会让自己的网站全站灰色,以表示对逝者的悼念。那么下面分享几种方法1、直接body中加入代码即可实现这种效果很简单,只需要一句css代码:filter: grayscale(100%…

解析 PHP 中 session 的实现原理以及大网站应用应该注意的问题

一 PHP SESSION原理 session 是在服务器端保持用户会话数据的一种方法,而 cookie 是在客户端保持用户数据。HTTP 协议是一种无状态协议,服务器响应完之后就失去了与浏览器的联系。那么,服务器是如何记住众多用户的会话数据呢? 首先…

简单快速的了解网站的安全情况

站长们最关心的问题,也是危害最大的,自己网站有没有被植入木马呢?如何最简单知道呢?下面给你们分享下最简单知道网站有没有被植入木马。 第一种方法: 在浏览器打开网址 http://webscan.360.cn/(如下图,正常…

MVC与单元测试实践之健身网站(二)-管理员模块

2019独角兽企业重金招聘Python工程师标准>>> 开始动手做这个项目时,发现无法做到完全的先设计、再编码,于是决定分模块进行,从管理员模块开始设计、编码,而且接口就已经改了好几次了。 管理员模块涉及的功能有登录和后…

Yahoo团队经验:网站性能优化的34条黄金法则

2019独角兽企业重金招聘Python工程师标准>>> 1、尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容。这部分时间包括下载页面中的图像、样式表、脚本、Flash等。通过减少页面中的元素可以减少 HTTP请求的次数。这是提高网页速度的关键步…

网路游侠:关于几个免费在线挂马检测网站

有时候我们需要知道一个网站的安全性,那么您可以像游侠这样在网站底部挂金山和瑞星的云安全检测系统,如下图所示:需要知道扫描效果的话,看看这两个网址:金山瑞星不过不知道大家看到没,瑞星只说有没有木马&a…

我觉得网站的通用部分

这个图片是我用xmind编辑的。欢迎大家来纠正或添加! 再来说说我对网站开发的理解与碰到的问题。 网站的前端有几个部分我觉得很重要: 1.优雅的文字提示 2.合理的页面设计 3.适当的脚本特效 一进入这个网站,就让人有一种非常舒适的感觉。并且在…

二、大型网站架构模式

为什么80%的码农都做不了架构师?>>> 1.分层:应用层(视图层、业务逻辑层)、服务层(数据接口层、逻辑处理层)、数据层。使逻辑结构清晰,解耦和,便于开发维护。 2.分割&…

使用apacheBench对网站进行压力测试(ab压力测试)

ApacheBench 简称ab, 是 Apache 附带的一个小工具 , 专门用测试网站服务器的运行想能,特别是针对Apache网站服务器的效能分析。专门用于 HTTP Server 的 benchmark testing , 可以同时模拟多个并发请求。 windows下在安装完apache…

SEO优化如何让提高收录量

相信在做SEO优化的网络人员来说,最高兴的时候就是看见自己辛苦打出来的文章被收录了。可是,收录量就有点。。。。今天,我就来教教大家怎么提高收录量,主要分四个方面。 1、收录网站的时间间隔网站的重点是网站页面收录之间的时间间…

如何将网站的php版本信息隐藏起来

当我们把网站上线之后,我们可以通过curl的如下命令显示指定网站的头信息,curl的安装方法参考:https://www.wj0511.com/site/detail.html?id105 curl -I https://www.wj0511.com 如: 这时候可以看到如下信息 X-Powered-By: PHP/7.0.21 这样我们可以看到我们可以…

百度商桥放在php网站哪里_教你如何做好百度竞价推广

如何做好百度推广?这是每个百度客户在加入百度推广后必然想到的一个问题,也是每个实施顾问所困惑的问题。究竟我们可以通过哪些方法达到客户的预期,使客户与百度长久稳定的合作呢?小编给大家分享一下下面是一些优化账户的方法,供大家参考:首…

mysql学习文档_「mysql学习」MySQL学习文档 - seo实验室

mysql学习基础知识1 创建表CREATE TABLE tablename (name1 CHAR(100),name2 NUMERIC,name3 INT);2 向表中按行插入数据INSERT INTO tablename(name1,name2,name3) VALUES(value1,value2,value3);插入多行INSERT INTO tablename(name1,name2,name3) VALUES(value1,value2,value3…