资讯专栏INFORMATION COLUMN

node 学习笔记(3)--Express

lewif / 639人阅读

摘要:执行安装依赖项,然后执行启动程序。模板的内容保存在内存中,性能会得到显著提升。视图查找当或被调用时,会先检查是否有文件在这个绝对路径上。代码清单修改了之前的实现,给出照片被上传时提供的名称,比如

Express起步

安装Express

一个最小的Express 程序

生成程序开发框架

package.json文件


Express猜不出你要用依赖项的哪个版本,所以你最好给出模块的主要、次要及修
订版本号,以免引入意料之外的bug。比如明确给出"express":"3.0.0"

要添加模块的最新版,比如这里的EJS,可以在安装时给npm传入--save标记。

得到

不管express(1)什么时候生成package.json文件,你都需要安装依赖项(如图8-9所示)。执行npm
install安装依赖项,然后执行node app.js启动程序。在浏览器中访问http://localhost:3000查
看程序

Express驱动配置系统

设置环境变量

这些环境变量会出现在你程序里的process.env对象中

尽管环境变量NODE_ENV源自Express,但现在很多Node框架都用它通知Node程序它在什么环
境中,默认为开发环境。

如代码清单8-3所示, app.configure()方法接受一个表示环境的可选字符串,以及一个函
数。当环境与传入的字符串相匹配时,回调函数会被立即调用;

Express视图系统配置

改变查找目录

_dirname:

改变默认视图模板引擎
因为原先你通 -e 创建的程序,它会默认 用ejs 作为视图模板;
通过下面的设置可以改变默认视图模板

用文件扩展名指定模板引擎
通过加后缀名的方式强制改变默认模板

视图缓存

生产环境中会默认启用view cache设定,并防止后续的render()调用执行硬盘I/O。

模板的内容保存在内存中,性能会得到显著提升。

启用这个设定的副作用是只有重启服务器才能让模板文件的编辑生效,所以在开发时会禁用它。

视图查找

当res.render()或app.render()被调用时, Express会先检查是否有文件在这个绝对路径上。

接着会找视图目录设定的相对路径。

Express会尝试使用index文件

视图显示

虚假照片数据

列表路由

添加photos.list路由
在./app.js中引入photos模块,访问你刚刚写好的exports.list函数。
为了在首页/中显示照片,要把photos.list函数传给app.get()方法,它会把路径/上的HTTP GET方法
映射到这个函数上

写照片列表视图的模板

将数据输出到视图中的方法

将本地变量直接传给res.render()

用app.locals传递程序层面的变量
Express默认只会向视图中输出一个程序级变量, settings,这个对象中包含所有用app.set()设定的值。比 如app.set("title", "My Application")会把settings.title输出到模板中


为了方便, app.locals也被做成了一个JavaScript函数。当有对象传入时,所有的键都会被合并
如果你有一个输出了几个函数的Node模块helpers.js,可以像下面这样把所有函数输出到视图中:

用res.locals传递请求层面的本地变量

处理表单和文件上传

实现照片上传功能总共分三步:
 定义照片模型;
 创建照片上传表单;
 显示照片列表。

设定照片上传目的地址的定制配置项

实现照片模型

Mongoose的模型上有所有的CRUD方法(Photo.create、 Photo.update、 Photo.remove
和Photo.find),所以这样就搞定了。

创建照片上传表单
你要把照片目录传给POST处理器,并返回一个路由回调,以便处理器可以访问这个目录。
把新路由添加到app.js中,放在默认(/)路由下面:

处理照片提交

multipart()中间件(包含在bodyParser中),它会给你一个req.files对象,代表上
传的文件,并把这个文件保存到硬盘中。

你可以通过req.files.photo.image访问这个对象。上传表单中的输入域, photo[name],可以通过req.body.photo.name访问到

显示上传照片列表
用Mongoose提供的Photo.find获取你上传的照片

创建资源下载

创建照片下载路由 /photo/:id/download
在模板中添加标记:

app.js中,在路由定义中找个你喜欢的地方把下面这条路由加进去:

实现照片下载路由

设定下载的文件名
你可以用res.download()的第二个参数定义一个定制的文件名,在下载时取代默认的原始
文件名。代码清单8-21修改了之前的实现,给出照片被上传时提供的名称,比如Flower.jpeg

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89364.html

相关文章

  • 基于 Vue2+Node+mongoDB 的前后端分离全栈练手小项目

    摘要:本文源码简介之前刚入门并做好了一个简而全的纯全家桶的项目,数据都是本地模拟请求的详情请移步这里为了真正做到数据库的真实存取,于是又开始入门了并以此来为之前的页面写后台数据接口。 本文源码:Github 简介: 之前刚入门vue并做好了一个简而全的纯vue2全家桶的项目,数据都是本地 json 模拟请求的;详情请移步这里:vue-proj-demo 为了真正做到数据库的真实存取,于是又...

    jay_tian 评论0 收藏0
  • AI开发书籍分享

    摘要:编程书籍的整理和收集最近一直在学习深度学习和机器学习的东西,发现深入地去学习就需要不断的去提高自己算法和高数的能力然后也找了很多的书和文章,随着不断的学习,也整理了下自己的学习笔记准备分享出来给大家后续的文章和总结会继续分享,先分享一部分的 编程书籍的整理和收集 最近一直在学习deep learning深度学习和机器学习的东西,发现深入地去学习就需要不断的去提高自己算法和高数的能力然后...

    huayeluoliuhen 评论0 收藏0

发表评论

0条评论

lewif

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<