- 浏览: 37779 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
liubey:
xly_971223 写道maven这东西搞得有点复杂,个人认 ...
人生无法避免之错------分析Maven的依赖 -
xly_971223:
maven这东西搞得有点复杂,个人认为不会长久
人生无法避免之错------分析Maven的依赖 -
303178394:
好的。谢谢
碎片化的年代-----MAVEN的部署和简单介绍 -
yixiandave:
xml可以用iteye的code元件的。例如
<?xml ...
碎片化的年代-----MAVEN的部署和简单介绍 -
gxz1989611:
把错别字改一改,代码格式调整下吧。看的不习惯。
碎片化的年代-----MAVEN的部署和简单介绍
logdown博文链接
今天博文比较长,就没重新排版了,欢迎各位戳logdown博文的地址。
今天家里有事没上班,终于可以好好写一篇关于总结的博文了。
转眼,作为团队项目管理的工作已经2个月了,这期间团队每两周也都会做一次总结,但是我觉得我也该自己独自总结下这两个月工作了,这两个月中团队是存在很多问题,毕竟接触项目管理方面的都是通过书本和敏捷大会、沙龙获得的理论知识,付诸于实践后肯定会有一些问题,还好之前所在的团队很善于总结,所以对于一些问题我还是会有一些想法要怎么处理,确实是有一些作用的。
比如我们开展敏捷开始采取的是逐步增加的方式进行,然后让问题出现,然后根据问题引入相应的措施,让团队成员感觉到敏捷的各个实践的真实作用:
1. 像任务分解过于主观,而且不到位,因此对于有些人无法接受,所以引入了任务分解会议和任务分解卡牌;
2. 像团队总体进展无法把握,无法感觉到这个sprint是否能按时完成,所以引入了燃尽图,而且因为我们有些需求会比较紧急要做,所以有时候会在一个sprint中加突发任务(按敏捷的最佳实践来说不能加,但是,我们情况比较特殊),所以我把燃尽图赶紧了下,每次增加任务都会产生一个锯齿,每个锯齿都要记录原因,并且在总结会讨论要如何对影响sprint进度的根源施加影响;
3. 像sprint中,团队成员对于需求和设计都不是很了解,所以之后采取的是设计不在是我一个人来做,也变成一个sprint任务,每个人都可以接手这个任务,从草图到原型图到原型图设计。不过这样又带来问题就是因为不熟悉如何做设计带来的进度变慢,返工变多。
这些都是过程中根据出现的问题想出的解决办法,还有一些问题暂时依旧未解决,而且很让人头疼。
1. 首先就是不信任感的问题:经常有一些工作,因为进度的原因,让他们来做会拖慢进度,所以我经常把这些工作在加班中完成,这样的印象就是我把难的全都做完了,剩下简单的给他们做,这是对他们的不信任,所以现在也尽量把一些设计工作让他们做,但是确实影响到了进度;还有就是有时候他们遇到问题时候会向我寻求帮助,但是我个人的习惯是番茄工作法,所以现在我的番茄钟会经常被打断,最高的时候我一天可以完成19个番茄钟,现在一天只有2-3个番茄钟。导致有时候忙比较重要的事情的时候,我会让他们等一等,这样没有立马得到响应就导致满意度、信任感下降,这个问题我暂时采取的办法就是尽量在允诺的时间范围内去解决他们刚刚提出的问题;
2. 还有就是态度、积极性、责任感的问题。有时候明知道自己的任务没完成,但是却依旧低效率、而且低效率后抵触加班。这个问题我觉得比较严重,技术的问题还都是可以弥补的,但是态度上的就比较麻烦。我现在想到的方法就是向组织寻求帮助,让一些比较有资历来通过威信稍微施加一些强制性的要求;
3. 再还有就是工作认真的问题,我是比较希望团队能做好单元测试、自测、交叉测试、代码走查工作的,但是现在团队貌似很难执行,或许这就是做项目和做产品的区别。这个问题感觉没那么好解决,只能先从自测开始,至少保证自己做的基本功能不会有问题,不要这个功能完全不能用,还让测试告诉你。
上周五也和领导交流了很久,他说的话我表示很赞同。毕竟我才刚工作2年,对于管理这块完全是没有经验的,所以组织上可以允许我犯错,但是犯错后一定要总结,总结后也一定要落地。这是一个摸着石头过河的阶段,一步踏错如果不纠正,就会走向死路。
----分割线----
之后会补一篇博文介绍http模块,那块是比较底层的接口,就像servlet一样,有了一些成熟的框架后不用再那么麻烦的去做项目了,但是还是要理解底层是如何操作的。
# 为什么使用express
nodeJs的http模块的操作相对来说比较麻烦,因为它其实是底层的接口。就像java的servlet就是底层接口,struts2+spring+hibernate就是通过框架的封装,提高了高层接口。
# Express的功能
Express除了为 http 模块提供了更高层的接口外,还实现了许多功能,其中包括:
1. 路由控制;
2. 模板解析支持;
3. 动态视图;
4.用户会话;
5.CSRF 保护;
6.静态文件服务;
7.错误控制器;
8.访问日志;
9.缓存;
10.插件支持。
# Express不具有的功能
Express不像ruby的Rails那样,具有模板引擎和ORM的相关功能,express只是对http进行了封装,一定要比较,我觉得他更像java的struts。
# Express的安装
全局模式安装:npm install -g express
查看帮助:express --help
```
[David@localhost mircoblog]$ express --help
Usage: express [options] [dir]
Options:
-h, --help output usage information
-V, --version output the version number
-s, --sessions add session support
-e, --ejs add ejs engine support (defaults to jade)
-J, --jshtml add jshtml engine support (defaults to jade)
-H, --hogan add hogan.js engine support
-c, --css <engine> add stylesheet <engine> support (less|stylus) (defaults to plain css)
-f, --force force on non-empty directory
```
# 开始Express
## 建立Express项目
注意,express3.x后的版本,不能使用express –t ejs mircoblog简历ejs的项目了,根据帮助信息可知,要使用express -e mircoblog,操作如下所示:
``` 控制台信息
[David@localhost studyDir]$ express -e mircoblog
create : mircoblog
create : mircoblog/package.json
create : mircoblog/app.js
create : mircoblog/public
create : mircoblog/public/javascripts
create : mircoblog/public/images
create : mircoblog/public/stylesheets
create : mircoblog/public/stylesheets/style.css
create : mircoblog/routes
create : mircoblog/routes/index.js
create : mircoblog/routes/user.js
create : mircoblog/views
create : mircoblog/views/index.ejs
install dependencies:
$ cd mircoblog && npm install
run the app:
$ node app
```
## 插入依赖并运行
看提示信息可以知道安装了哪些目录和文件,然后还提示我们去导入依赖,然后运行应用,按照提示继续操作。
```
[David@localhost studyDir]$ cd mircoblog && npm install
```
提示信息比较多,就不列举了。
无参数的 npm install 的功能就是检查当前目录下的 package.json,并自动安装所有dependencies 属性中所指定的依赖。
```
[David@localhost mircoblog]$ node app.js
Express server listening on port 3000
```
##成果
# 目录结构
Express3.0将原来很多默认的设置都通过插件来使用了,所以很多地方需要注意。
比如,要使用partials需要另外插入该插件,操作如下:
```
[David@localhost mircoblog]$ npm install express-partials
npm WARN package.json application-name@0.0.1 No README.md file found!
npm http GET https://registry.npmjs.org/express-partials
npm http 200 https://registry.npmjs.org/express-partials
npm http GET https://registry.npmjs.org/express-partials/-/express-partials-0.1.1.tgz
npm http 200 https://registry.npmjs.org/express-partials/-/express-partials-0.1.1.tgz
express-partials@0.1.1 node_modules/express-partials
```
## app.js,工程的入口
注意,express中需要开启partials。app.use(partials())。
```nodejs app.js
/**
* Module dependencies.
*/
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var partials = require('express-partials');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(partials());
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
app.get('/users', user.list);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
```
### app.set
Express 的参数设置工具,接受一个键(key)和一个值(value),可用的参
数如下所示。
1. port :服务的端口。
2. view engine:视图模板引擎。
3. view cache:启用视图缓存。
### app.use
Express 依赖于 connect,提供了大量的中间件,可以通过 app.use 启用。app.configure中启用了4个中间件:methodOverride、router、static 以及 errorHandler。
methodOverride用于支持定制的 HTTP 方法。router 是项目的路由支持。static 提供了静态文件支持。errorHandler 是错误控制器。
### app.get('/', routes.index)
这是一个路由控制器,用户如果访问“ / ”路径,则由 routes.index 来控制。
### routes/index.js
routes/index.js 是路由文件,相当于控制器,用于组织展示的内容:
```nodejs routes/index.js
exports.index = function(req, res){
res.render('index', { title: 'Express' });
};
```
app.js 中通过 app.get('/', routes.index); 将“ / ”路径映射到 exports.index函数下。其中只有一个语句 res.render('index', { title: 'Express' }),功能是调用模板解析引擎,翻译名为 index 的模板,并传入一个对象作为参数,这个对象只一个属性,即 title: 'Express'。
### index.ejs
这部分需要自己修改index.ejs和添加layout.ejs,express3.x默认是不会用这种模式的。
index.ejs 是模板文件,即 routes/index.js 中调用的模板,内容是:
…ejs routes/index.js
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
…
它的基础是 HTML 语言,其中包含了形如 <%= title %> 的标签,功能是显示引用的变量,即 res.render 函数第二个参数传入的对象的属性。
### layout.ejs
模板文件不是孤立展示的,默认情况下所有的模板都继承自 layout.ejs,即 <%- body %>部分才是独特的内容,其他部分是共有的,可以看作是页面框架。
这方式就很像java的decorators,也就是装饰模式。
```ejs layout.ejs
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<%- body %>
</body>
</html>
```
# 路由控制器
顾名思义,就像路由器有路由表,可以根据访问的IP地址找到目标主机,当输入路径的时候,就是通过路由控制器来找到实际的处理代码。app.get(‘/’,routes.index)就是一个路由规则。
## 创建新的路由规则
在app.js中添加一个新的规则,app.get('/hello', routes.hello);。
index.js改为
```nodejs routes.index.js
exports.index = function(req, res){
res.render('index', { title: 'Express' });
};
exports.hello = function(req, res) {
res.send('The time is ' + new Date().toString()+',My name is David!');
};
```
这时候可以查看结果:
Rest-ful风格的匹配规则
app.js中添加
app.get('/user/:username', routes.index);
index.js修改为
```nodejs routes/index.js
exports.index = function(req, res){
res.render('index', { title: 'Express' });
};
exports.hello = function(req, res) {
res.send('The time is ' + new Date().toString()+',My name is David!');
};
exports.user = function(req, res) {
res.send('Hello my old sports , I am Ur ' + req.params.username);
};
```
访问的结果:
路径规则同样支持 JavaScript 正则表达式,例如 app.get(\/user\/([^\/]+)\/?,callback)。这样的好处在于可以定义更加复杂的路径规则,而不同之处是匹配的参数是匿名的,因此需要通过 req.params[0]、req.params[1] 这样的形式访问。
具体什么是REST-FUL(表现层状态转移)风格,请戳这里。
我们经常用到的是 GET、POST、PUT 和 DELETE 方法。根据 REST 设计模式,这4种方法通常分别用于实现以下功能。
1. GET:获取
2. POST:新增
3. PUT:更新
4. DELETE:删除
| Tables | 请求方式 | 安全 | 幂等 | 绑定函数 |
| ------------- |:-------------:| -----:|:-------------:| -----:|
| col 1 | GET | 是 | 是 | app.get(path,callback)|
| col 2 | POST | 否 | 否 | app.post(path,callback) |
| col 3 | PUT | 否 | 是 | app.put(path,callback) |
| col 3 | DELETE | 否 | 是 | app.delete(path,callback) |
注意:
1. 所有方法的绑定函数是app.all(path,callback);
2. 幂等指的是重复请求多次与一次请求的效果是一样;
3. 安全是指没有副作用,即请求不会对资源产生变动,连续访问多次所获得的结果不受访问者的影响。
## 多路由规则
当同一个地址有多个路由规则的时候,会相应最先配置的路由规则。例如,修改app.js为
```nodejs app.js片段
app.get('/', routes.index);
app.get('/hello', routes.hello);
app.all('/user/:username', function(req, res) {
res.send('all methods captured');
});
app.get('/user/:username',routes.user);
```
结果为:
根据结果可知,后面的路由规则没有被调用。那如何让两个路由规则都被调用呢?
要实现这功能,就必须在response关闭前,调用next(),注意,在3.x中需要在回调函数的参数列表中列出next来,如下为app.js片段:
```nodejs app.js片段
app.get('/', routes.index);
app.get('/hello', routes.hello);
app.all('/user/:username', function(req, res,next) {
console.log('all methods captured');
next();
});
app.get('/user/:username',routes.user);
```
直接看结果吧:
又可以输出get方式的输出了。
同时控制台也打印出了all方式的打印信息。
这种方式经常可以用在输入信息的验证,比如先验证表单的有效性,不合法则直接关闭response并提示,否则next。
今天博文比较长,就没重新排版了,欢迎各位戳logdown博文的地址。
今天家里有事没上班,终于可以好好写一篇关于总结的博文了。
转眼,作为团队项目管理的工作已经2个月了,这期间团队每两周也都会做一次总结,但是我觉得我也该自己独自总结下这两个月工作了,这两个月中团队是存在很多问题,毕竟接触项目管理方面的都是通过书本和敏捷大会、沙龙获得的理论知识,付诸于实践后肯定会有一些问题,还好之前所在的团队很善于总结,所以对于一些问题我还是会有一些想法要怎么处理,确实是有一些作用的。
比如我们开展敏捷开始采取的是逐步增加的方式进行,然后让问题出现,然后根据问题引入相应的措施,让团队成员感觉到敏捷的各个实践的真实作用:
1. 像任务分解过于主观,而且不到位,因此对于有些人无法接受,所以引入了任务分解会议和任务分解卡牌;
2. 像团队总体进展无法把握,无法感觉到这个sprint是否能按时完成,所以引入了燃尽图,而且因为我们有些需求会比较紧急要做,所以有时候会在一个sprint中加突发任务(按敏捷的最佳实践来说不能加,但是,我们情况比较特殊),所以我把燃尽图赶紧了下,每次增加任务都会产生一个锯齿,每个锯齿都要记录原因,并且在总结会讨论要如何对影响sprint进度的根源施加影响;
3. 像sprint中,团队成员对于需求和设计都不是很了解,所以之后采取的是设计不在是我一个人来做,也变成一个sprint任务,每个人都可以接手这个任务,从草图到原型图到原型图设计。不过这样又带来问题就是因为不熟悉如何做设计带来的进度变慢,返工变多。
这些都是过程中根据出现的问题想出的解决办法,还有一些问题暂时依旧未解决,而且很让人头疼。
1. 首先就是不信任感的问题:经常有一些工作,因为进度的原因,让他们来做会拖慢进度,所以我经常把这些工作在加班中完成,这样的印象就是我把难的全都做完了,剩下简单的给他们做,这是对他们的不信任,所以现在也尽量把一些设计工作让他们做,但是确实影响到了进度;还有就是有时候他们遇到问题时候会向我寻求帮助,但是我个人的习惯是番茄工作法,所以现在我的番茄钟会经常被打断,最高的时候我一天可以完成19个番茄钟,现在一天只有2-3个番茄钟。导致有时候忙比较重要的事情的时候,我会让他们等一等,这样没有立马得到响应就导致满意度、信任感下降,这个问题我暂时采取的办法就是尽量在允诺的时间范围内去解决他们刚刚提出的问题;
2. 还有就是态度、积极性、责任感的问题。有时候明知道自己的任务没完成,但是却依旧低效率、而且低效率后抵触加班。这个问题我觉得比较严重,技术的问题还都是可以弥补的,但是态度上的就比较麻烦。我现在想到的方法就是向组织寻求帮助,让一些比较有资历来通过威信稍微施加一些强制性的要求;
3. 再还有就是工作认真的问题,我是比较希望团队能做好单元测试、自测、交叉测试、代码走查工作的,但是现在团队貌似很难执行,或许这就是做项目和做产品的区别。这个问题感觉没那么好解决,只能先从自测开始,至少保证自己做的基本功能不会有问题,不要这个功能完全不能用,还让测试告诉你。
上周五也和领导交流了很久,他说的话我表示很赞同。毕竟我才刚工作2年,对于管理这块完全是没有经验的,所以组织上可以允许我犯错,但是犯错后一定要总结,总结后也一定要落地。这是一个摸着石头过河的阶段,一步踏错如果不纠正,就会走向死路。
----分割线----
之后会补一篇博文介绍http模块,那块是比较底层的接口,就像servlet一样,有了一些成熟的框架后不用再那么麻烦的去做项目了,但是还是要理解底层是如何操作的。
# 为什么使用express
nodeJs的http模块的操作相对来说比较麻烦,因为它其实是底层的接口。就像java的servlet就是底层接口,struts2+spring+hibernate就是通过框架的封装,提高了高层接口。
# Express的功能
Express除了为 http 模块提供了更高层的接口外,还实现了许多功能,其中包括:
1. 路由控制;
2. 模板解析支持;
3. 动态视图;
4.用户会话;
5.CSRF 保护;
6.静态文件服务;
7.错误控制器;
8.访问日志;
9.缓存;
10.插件支持。
# Express不具有的功能
Express不像ruby的Rails那样,具有模板引擎和ORM的相关功能,express只是对http进行了封装,一定要比较,我觉得他更像java的struts。
# Express的安装
全局模式安装:npm install -g express
查看帮助:express --help
```
[David@localhost mircoblog]$ express --help
Usage: express [options] [dir]
Options:
-h, --help output usage information
-V, --version output the version number
-s, --sessions add session support
-e, --ejs add ejs engine support (defaults to jade)
-J, --jshtml add jshtml engine support (defaults to jade)
-H, --hogan add hogan.js engine support
-c, --css <engine> add stylesheet <engine> support (less|stylus) (defaults to plain css)
-f, --force force on non-empty directory
```
# 开始Express
## 建立Express项目
注意,express3.x后的版本,不能使用express –t ejs mircoblog简历ejs的项目了,根据帮助信息可知,要使用express -e mircoblog,操作如下所示:
``` 控制台信息
[David@localhost studyDir]$ express -e mircoblog
create : mircoblog
create : mircoblog/package.json
create : mircoblog/app.js
create : mircoblog/public
create : mircoblog/public/javascripts
create : mircoblog/public/images
create : mircoblog/public/stylesheets
create : mircoblog/public/stylesheets/style.css
create : mircoblog/routes
create : mircoblog/routes/index.js
create : mircoblog/routes/user.js
create : mircoblog/views
create : mircoblog/views/index.ejs
install dependencies:
$ cd mircoblog && npm install
run the app:
$ node app
```
## 插入依赖并运行
看提示信息可以知道安装了哪些目录和文件,然后还提示我们去导入依赖,然后运行应用,按照提示继续操作。
```
[David@localhost studyDir]$ cd mircoblog && npm install
```
提示信息比较多,就不列举了。
无参数的 npm install 的功能就是检查当前目录下的 package.json,并自动安装所有dependencies 属性中所指定的依赖。
```
[David@localhost mircoblog]$ node app.js
Express server listening on port 3000
```
##成果
# 目录结构
Express3.0将原来很多默认的设置都通过插件来使用了,所以很多地方需要注意。
比如,要使用partials需要另外插入该插件,操作如下:
```
[David@localhost mircoblog]$ npm install express-partials
npm WARN package.json application-name@0.0.1 No README.md file found!
npm http GET https://registry.npmjs.org/express-partials
npm http 200 https://registry.npmjs.org/express-partials
npm http GET https://registry.npmjs.org/express-partials/-/express-partials-0.1.1.tgz
npm http 200 https://registry.npmjs.org/express-partials/-/express-partials-0.1.1.tgz
express-partials@0.1.1 node_modules/express-partials
```
## app.js,工程的入口
注意,express中需要开启partials。app.use(partials())。
```nodejs app.js
/**
* Module dependencies.
*/
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var partials = require('express-partials');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(partials());
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
app.get('/users', user.list);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
```
### app.set
Express 的参数设置工具,接受一个键(key)和一个值(value),可用的参
数如下所示。
1. port :服务的端口。
2. view engine:视图模板引擎。
3. view cache:启用视图缓存。
### app.use
Express 依赖于 connect,提供了大量的中间件,可以通过 app.use 启用。app.configure中启用了4个中间件:methodOverride、router、static 以及 errorHandler。
methodOverride用于支持定制的 HTTP 方法。router 是项目的路由支持。static 提供了静态文件支持。errorHandler 是错误控制器。
### app.get('/', routes.index)
这是一个路由控制器,用户如果访问“ / ”路径,则由 routes.index 来控制。
### routes/index.js
routes/index.js 是路由文件,相当于控制器,用于组织展示的内容:
```nodejs routes/index.js
exports.index = function(req, res){
res.render('index', { title: 'Express' });
};
```
app.js 中通过 app.get('/', routes.index); 将“ / ”路径映射到 exports.index函数下。其中只有一个语句 res.render('index', { title: 'Express' }),功能是调用模板解析引擎,翻译名为 index 的模板,并传入一个对象作为参数,这个对象只一个属性,即 title: 'Express'。
### index.ejs
这部分需要自己修改index.ejs和添加layout.ejs,express3.x默认是不会用这种模式的。
index.ejs 是模板文件,即 routes/index.js 中调用的模板,内容是:
…ejs routes/index.js
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
…
它的基础是 HTML 语言,其中包含了形如 <%= title %> 的标签,功能是显示引用的变量,即 res.render 函数第二个参数传入的对象的属性。
### layout.ejs
模板文件不是孤立展示的,默认情况下所有的模板都继承自 layout.ejs,即 <%- body %>部分才是独特的内容,其他部分是共有的,可以看作是页面框架。
这方式就很像java的decorators,也就是装饰模式。
```ejs layout.ejs
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<%- body %>
</body>
</html>
```
# 路由控制器
顾名思义,就像路由器有路由表,可以根据访问的IP地址找到目标主机,当输入路径的时候,就是通过路由控制器来找到实际的处理代码。app.get(‘/’,routes.index)就是一个路由规则。
*图7-1 Express创建的网站的架构*
## 创建新的路由规则
在app.js中添加一个新的规则,app.get('/hello', routes.hello);。
index.js改为
```nodejs routes.index.js
exports.index = function(req, res){
res.render('index', { title: 'Express' });
};
exports.hello = function(req, res) {
res.send('The time is ' + new Date().toString()+',My name is David!');
};
```
这时候可以查看结果:
Rest-ful风格的匹配规则
app.js中添加
app.get('/user/:username', routes.index);
index.js修改为
```nodejs routes/index.js
exports.index = function(req, res){
res.render('index', { title: 'Express' });
};
exports.hello = function(req, res) {
res.send('The time is ' + new Date().toString()+',My name is David!');
};
exports.user = function(req, res) {
res.send('Hello my old sports , I am Ur ' + req.params.username);
};
```
访问的结果:
路径规则同样支持 JavaScript 正则表达式,例如 app.get(\/user\/([^\/]+)\/?,callback)。这样的好处在于可以定义更加复杂的路径规则,而不同之处是匹配的参数是匿名的,因此需要通过 req.params[0]、req.params[1] 这样的形式访问。
具体什么是REST-FUL(表现层状态转移)风格,请戳这里。
我们经常用到的是 GET、POST、PUT 和 DELETE 方法。根据 REST 设计模式,这4种方法通常分别用于实现以下功能。
1. GET:获取
2. POST:新增
3. PUT:更新
4. DELETE:删除
| Tables | 请求方式 | 安全 | 幂等 | 绑定函数 |
| ------------- |:-------------:| -----:|:-------------:| -----:|
| col 1 | GET | 是 | 是 | app.get(path,callback)|
| col 2 | POST | 否 | 否 | app.post(path,callback) |
| col 3 | PUT | 否 | 是 | app.put(path,callback) |
| col 3 | DELETE | 否 | 是 | app.delete(path,callback) |
*表7-2 REST风格HTTP请求特点*
注意:
1. 所有方法的绑定函数是app.all(path,callback);
2. 幂等指的是重复请求多次与一次请求的效果是一样;
3. 安全是指没有副作用,即请求不会对资源产生变动,连续访问多次所获得的结果不受访问者的影响。
## 多路由规则
当同一个地址有多个路由规则的时候,会相应最先配置的路由规则。例如,修改app.js为
```nodejs app.js片段
app.get('/', routes.index);
app.get('/hello', routes.hello);
app.all('/user/:username', function(req, res) {
res.send('all methods captured');
});
app.get('/user/:username',routes.user);
```
结果为:
根据结果可知,后面的路由规则没有被调用。那如何让两个路由规则都被调用呢?
要实现这功能,就必须在response关闭前,调用next(),注意,在3.x中需要在回调函数的参数列表中列出next来,如下为app.js片段:
```nodejs app.js片段
app.get('/', routes.index);
app.get('/hello', routes.hello);
app.all('/user/:username', function(req, res,next) {
console.log('all methods captured');
next();
});
app.get('/user/:username',routes.user);
```
直接看结果吧:
又可以输出get方式的输出了。
同时控制台也打印出了all方式的打印信息。
这种方式经常可以用在输入信息的验证,比如先验证表单的有效性,不合法则直接关闭response并提示,否则next。
发表评论
-
暂停更新ITEYE博客
2014-01-02 22:36 349最近工作比较忙,暂时就不更新ITEYE这边的博客。LOGDOW ... -
元总结---express框架之模板引擎、片段视图、视图助手
2013-12-27 07:45 2521Logdown博文地址 #元总结 ... -
学会提问---nodejs初体验
2013-12-20 07:45 967惯例,先上logdown地址 ... -
Just be fun ---centos6安装nodejs0.9.0全过程
2013-12-19 08:03 1099logdown地址 =。。= 不是 ... -
亡羊补牢---Maven的约定和反应堆
2013-12-17 07:42 1751logdown博文地址 不得不说,时间过得还真挺快的,两个月 ... -
不得意后的些许收获-----Maven的聚合和集成
2013-12-13 08:38 1539LogDown发布的地址 上篇 ... -
工作中的那些不得意---Maven生命周期以及插件详解
2013-12-06 07:49 1766今天写的比较多,有时 ... -
人生无法避免之错------分析Maven的依赖
2013-11-29 07:48 5688上一个Sprint总结会中,组内有人提出很多需求为什么会变化, ... -
碎片化信息的影响---Maven注意事项
2013-11-27 07:49 1312追求获取信息的速度和效率本来就是网络持之以恒的使命,有相当数量 ... -
碎片化的年代-----MAVEN的部署和简单介绍
2013-11-26 07:49 1439现在就是一个碎片化的年代——信息的碎片化、浏览器的碎片化、安卓 ... -
思而不学则殆则殆----Java程序员学Python学习笔记(三)
2013-11-22 07:51 983项管考试结束已经10来 ... -
编程语言的黄金时代-------系统集成项目管理工程师复习(四,常错题目纠正)
2013-10-26 10:05 1380好久没写博文了,整个 ... -
财富的不平等----系统集成项目管理工程师计算题复习(三)信息技术基础知识
2013-10-17 07:24 883这篇文章其实是写给自己看的,自己最近的确是对当前薪资很不满意, ... -
浅谈考核----系统集成项目管理工程师成本管理计算题复习
2013-10-14 07:28 1531齐威王召即墨大夫 ... -
傲慢与谦卑----系统集成项目管理工程师时间管理计算题复习
2013-10-12 06:49 1052天理路上甚宽,稍 ... -
了不起的盖茨比读后感---Java程序员学Python学习笔记(二)
2013-09-30 07:28 1637还是从logdown搬过来的,搬的时候稍微排版了下。今 ... -
沉默成本,跪在坚持----Java程序员学Python学习笔记(一)
2013-09-27 07:19 3095搬运工又来了,从自己的logdown博客搬东西过来了。 ... -
在我看来如何学习编程
2013-09-07 08:34 1096最近都在logdown写博文, ... -
Java面对对象类设计随笔
2013-08-23 07:06 2493想要做好设计很不 ... -
如果你觉得现在的你做的不好,那就请改变现在的状况
2013-08-20 06:59 1429最近看了一些博文(每天工作四小时),一些书(浪潮之巅) ...
相关推荐
speech-to-text-nodejs, IBM Watson语音到文本服务的样例 node.js 应用程序 向文本浏览器应用程序添加语音 在文本转换中使用了ibm的语音识别功能来将多种语言中的语音转换成文本,从而实现文本的转换。 传入音频的...
node-websocket-client, NodeJS的Web Socket客户端 一个 Prototype Web Socket 客户端实现 node.js 。测试 miksago/node-websocket-server v1.2.00.需要 nodejs 0.1.98或者更高版本。安装按如下方式使用 np
nodejs-microservice-starter, NodeJS RESTful API Microservice Starter NodeJS RESTful API Microservice v1.2.0这个存储库包含运行 NodeJS rest式 API Microservice启动器的完整配置。 要求NodeJS用于本地开
sketch-node-parser, 使用纯NodeJS从草图中解析文件 sketch-node-parser使用纯NodeJS从草图中解析文件。这个项目只是一个 proof-of-concept,并没有准备好使用。摘要这个程序演示如何打开一个草图文件,并将它解析为...
line-bot-sdk-nodejs, 用于在线消息传递API的node.js SDK line-bot-sdk-nodejs 用于在线消息传递API的Node.js SDK正在启动安装使用 npm插件:$ npm install @line/bot-sdk文档参考指南。API参考
选单快速开始安装Node.js,Expressjs LaravelMix和MongoDB: $ git clone https://github.com/manish0502/Building-pizza-order-tracker-app-using-NodeJs-Express-and-Mongo-DB.git$ npm i and npm run all$ ...
webpack-iconfont-plugin-nodejs 使用svg文件构建iconfont文件(ttf,woff2,woff,eot,svg),css文件,js数据文件和html预览文件。 特征: Iconfont输出格式:WOFF2,WOFF,EOT,TTF和SVG。 生成CSS文件,js...
jcr-oak-rpc-api-nodejs 用于通过 nodejs 访问 Jacrabbit Oak 存储库的 Api 入门 安装模块: npm install jcr-oak-rpc-api-nodejs var jcr - oak - rpc - api - nodejs = require ( 'jcr-oak-rpc-api-nodejs' ) ;...
hpts(http-proxy-to-socks) 一个nodejs客户端将socks代理转换为http代理
思路:温湿度计通过MQTT协议连接到IoT套件,规则引擎针对数据上报Topic配置转发到函数计算(FunctionComputer)中编写好的函数pushData2DingTalk,函数Nodejs脚本处理数据,post到钉钉群机器人的Webhook,配置了温湿度...
Ansible-ansible-role-nodejs.zip,使用不可操作角色提供nodejs和npm模块的ansible角色:nodejs,ansible是一个简单而强大的自动化引擎。它用于帮助配置管理、应用程序部署和任务自动化。
该NodeJS模块旨在使用抓取和解析Google,Bing和百度的结果。 该Ruby Gem旨在使用抓取并解析Google结果。 提供以下服务: SerpApi提供了一个,可帮助您快速入门。 该Ruby Gem旨在使用抓取并解析Google结果。 提供...
$ git clone https://github.com/manish0502/Building-pizza-order-tracker-app-using-NodeJs-Express-and-Mongo-DB.git $ npm i and npm run all $ http://localhost:3000/ 开发服务器 为开发服务器运行npm run ...
amazon-kinesis-client-nodejs, 亚马逊 node.js Kinesis客户端库 Node.js Kinesis客户端库这个软件包为 Amazon Kinesis客户端库 ( KCL ) MultiLangDaemon提供了一个接口,用于 node.js 框架。开发人员可以使用KCL...
这个压缩包文件名为“Atom-atom-nodejs-snippets.zip”,其核心内容是“atom-nodejs-snippets-master”目录,包含了各种预定义的代码片段。这些片段涵盖了Node.js和JavaScript的常见操作,如数据库交互、文件操作、...
EasyQRCodeJS-NodeJS EasyQRCodeJS-NodeJS is a NodeJS server side javascript QRCode image(PNG/JPEG/SVG/Base64 data url) generator. Support setting Dot style, Logo, Background image, Colorful, Title and ...
LokiJs - Express - AngularJs - NodeJs 1)克隆项目 2)解压 3) 运行 npm install 4) 运行节点 server.js 5) 浏览到并享受基于 LokiJS、Express、NodeJs 和 AngularJS 的 CRUD 应用程序。 或者使用邮递员或任何...
Express JS, MongoDB 后端面试问答 点击 :star: 如果你喜欢这个项目。 拉取请求受到高度赞赏。 关注我获取技术更新。 目录 - Node JS 不。 问题 节点JS 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
用node.js实现区块链开发,对区块链开发有兴趣的同学可以下载看看
cos-nodejs-sdk-v5腾讯云 COS Nodejs SDK()installnpm i cos-nodejs-sdk-v5 --savedemo// 引入模块var COS = require('cos-nodejs-sdk-v5');// 创建实例var cos = new COS({ SecretId: '...