express-3 最佳实践
版本控制###
版本控制有以下益处:
- 文档: 能够回溯项目的历史,回顾所做的决策及组件的开发顺序,可形成宝贵的文档。记录项目的历史是十分有价值的。
- 归属: 团队工作,分工清晰,节省沟通成本。
- 试验: 你可以引出一个分支,尝试做一些新的东西,不用担心会影响项目的稳定性。
使用Git###
初始化
git init**创建一个.gitignore文件**
node_modules
*~
.DS_Store
.gitignore文件中的条目也适用于子目录。
- 添加修改
git add -A
它添加的是修改,而不是文件。
- 提交
git commit -m "Initial commit."
npm包###
永远不要修改node_modules目录中的任何代码; 如果想对项目所依赖的包进行修改,正确的做法应该是创建那个项目的副本。
- package.json
package.json文件有双重作用:描述项目和列出依赖项。
{
"dependencies": {
"express": "^4.0.0",
"express3-handlebars": "^0.5.0"
}
}
包版本号之前的插入符(^),这表明在下一个主要版本号之前,所有以指定版本号开始的版本都能用。(4.0.0-4.9.9); 这是使用npm install --save时默认指定的版本范围,并且通常也很安全。
如果你想了解npm中更多与版本有关的信息,可以翻阅一下semver的文档
项目元数据###
package.json文件的另一个作用便是存放项目的元数据。可以用npm init来初始化创建package.json文件。如果想把项目放到npm或Github上,则对元数据的要求会比较严格。
想了解更多有关package.json中各个域的信息,请查阅package.json的文档
另一个重要的元数据是README.md文件。这个文件很适合描述网站的整体架构,也适合于存放刚接触项目的人需要了解的重要信息。这个文件是用基于Markdown的文本维基格式写成的。
更多信息请查阅Markdown文档。
Node模块###
Node模块和npm包是两个相互关联但又彼此不同的概念。Node模块提供了一个模块化和封装的机制。npm包则提供了一种存储、版本化和引用项目(不限于模块)的标准范式。
var express = require('express');
require是一个用来引入模块的Node函数。Node默认会在目录node_modules中寻找这些模块。然而Node还提供了创建自有模块的机制(永远不要在node_modules中创建自己的模块)
创建一个模块
- 创建一个用来保存模块的目录,一般都称为lib;这个目录下创建一个fortune.js文件:
var fortuneCookies = [
"Conquer your fears or they will conquer you.",
"Rivers need springs.",
"Do not fear what you don't know.",
"You will have a pleasant surprise.",
"Whenever possible, keep it simple.",
];
exports.getFortune = function() {
var idx = Math.floor(Math.random() * fortuneCookies.length);
return fortuneCookies[idx];
};
这里要特别注意全局变量输出的用法。如果你想让一个东西在模块外可见,必须把它加到exports上。在这个例子中,在模块外可以访问到函数getFortune,但数组fortuneCookies是完全隐藏起来的。
- 在原来的meadowlark.js中移除fortuneCookies数组,并在顶部加上下面这行代码:
var fortune = require('./lib/fortune.js');
在模块名称前加了前缀./。这是告诉Node,它不应该到node_modules目录中查找这个模块,如果我们忽略了这个前缀就会导致失败。
- 接下来在关于页面的路由中,利用以上模块里的getFortune方法:
app.get('/about', function(req, res) {
res.render('about', { fortune: fortune.getFortune() } );
});
了解更多信息,请参考Node模块的官方文档
express-3 最佳实践的更多相关文章
- nodejs 实践:express 最佳实践 (一)
express 最佳实践 (一) 最近,一直在使用 nodejs 做项目,对 nodejs 开发可以说深有体会. 先说说 nodejs 在业务中的脚色,, 在 web同构 方面, nodejs 的优势 ...
- express 最佳实践(二):中间件
express 最佳实践(二):中间件 第一篇 express 最佳实践(一):项目结构 express 中最重要的就是中间件了,可以说中间件组成了express,中间件就是 express 的核心. ...
- nodejs 实践:express 最佳实践(四) express-session 解析
nodejs 实践:express 最佳实践(四) express-session 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs ...
- nodejs 实践:express 最佳实践系列
nodejs 实践:express 最佳实践系列 nodejs 实践:express 最佳实践(一) 项目结构 nodejs 实践:express 最佳实践(二) 中间件 nodejs 实践:expr ...
- nodejs 实践:express 最佳实践 (一) 项目结构
express 最佳实践 (一) 第二篇: express 最佳实践(二):中间件 最近,一直在使用 nodejs 做项目,对 nodejs 开发可以说深有体会. 先说说 nodejs 在业务中的脚色 ...
- nodejs 实践:express 最佳实践(二) 中间件
express 最佳实践(二):中间件 第一篇 express 最佳实践(一):项目结构 express 中最重要的就是中间件了,可以说中间件组成了express,中间件就是 express 的核心. ...
- nodejs 实践:express 最佳实践(三) express 解析
nodejs 实践:express 最佳实践(三) express 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固, ...
- nodejs 实践:express 最佳实践(五) connect解析
nodejs 实践:express 最佳实践(五) connect解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需 ...
- nodejs 实践:express 最佳实践(六) express 自省获得所有的路由
nodejs 实践:express 最佳实践(六) express 自省获得所有的路由 某些情况下,你需要知道你的应用有多少路由,这在 express 中没有方法可以.因此我这边曲线了一下,做成了一个 ...
- nodejs 实践:express 最佳实践(七) 改造模块 connect2 解析
nodejs 实践:express 最佳实践(七) 改造模块 connect2 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的 ...
随机推荐
- 【leetcode】Binary Tree Level Order Traversal I & II
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 后台弹出JS类
using System; using System.Collections.Generic; using System.Text; using System.Web; using System.We ...
- 20145213《Java程序设计学习笔记》第六周学习总结
20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...
- IOS - UITableViewCell的选中时的颜色及tableViewCell的selecte与deselecte
1.系统默认的颜色设置 [cpp] view plaincopy //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 ...
- ODBC连接发生错误:未发现数据源名称并且未指定默认驱动程序
程序在使用ODBC方式连接数据库时发生错误: ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序. 什么原因造成的呢? 本人使用&l ...
- [Android Pro] Gradle Tips#2-语法
referece to : http://blog.csdn.net/lzyzsd/article/details/46935063 在第一篇博客中,我讲解了关于tasks和构建过程中task的不同阶 ...
- 第三章 C#循环与方法
第一节1-For循环入门 语法: for(条件表达式) { 执行语句 } 练习: 第三章作业1.写一个程序打印100到200的值;2.写一个程序从10打印到1:3.写一个程序打印10到30之间的所有偶 ...
- 【转】深入Windows内核——C++中的消息机制
上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图 Win32 ...
- 指针和引用的区别(c/c++)
http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用 ...
- Android的两种事件处理机制
UI编程通常都会伴随事件处理,Android也不例外,它提供了两种方式的事件处理:基于回调的事件处理和基于监听器的事件处理. 对于基于监听器的事件处理而言,主要就是为Android界面组件绑定特定的事 ...