给你的iOS应用配个node.js服务器(二)

上集说道 get 就嘎然而止 。是不是感觉有点欲罢不能 。我们这集再讲下post 以及 express 的其他用法


  • 上代码 。在index.js中添加

//会返回这个请求的参数
app.post('hello',function (req,res,next) {
res.send(req.body)
});

用post man 测下 是不是通了 😄

* express
  * ```
var express = require('express');
var app = express();

// 一个简单的 logger
app.use(function(req, res, next){
console.log('%s %s', req.method, req.url);
next();
});
// 响应
app.use(function(req, res, next){
res.send('Hello World');
});

挂载的路径不会在req里出现,对中间件 function
**不**可见,这意味着你在function
的回调参数req里找不到path。 这么设计的为了让间件可以在不需要更改代码就在任意"前缀"路径下执行
这里有一个实际应用场景,常见的一个应用是使用./public提供静态文件服务, 用 express.static()
 中间件:

app.use(express.static(__dirname + '/public'));

app.param([name], callback)

路由参数的处理逻辑。比如当 :user
出现在一个路由路径中,你也许会自动载入加载用户的逻辑,并把它放置到 req.user
, 或者校验一下输入的参数是否正确。
下面的代码片段展示了callback
很像中间件,但是在参数里多加了一个值,这里名为id
. 它会尝试加载用户信息,然后赋值给req.user
, 否则就传递错误next(err)
.
app.param('user', function(req, res, next, id){
User.find(id, function(err, user){
if (err) {
next(err); }
else if (user) {
req.user = user;
next();
} else {
next(new Error('failed to load user'));
} });
});
另外你也可以只传一个callback
, 这样你就有机会改变 app.param()
API. 比如
express-params
定义了下面的回调,
这个允许你使用一个给定的正则去限制参数。
下面的这个例子有一点点高级,
检查如果第二个参数是一个正则,
返回一个很像上面的"user"参数例子行为的回调函数。
app.param(function(name, fn){
if (fn instanceof RegExp) {
return function(req, res, next, val){
var captures;
if (captures = fn.exec(String(val))) {
req.params[name] = captures; next();
} else {
next('route');
} } }});
这个函数现在可以非常有效的用来校验参数,或者提供正则捕获后的分组。
app.param('id', /^\d+$/);
app.get('/user/:id', function(req, res){
res.send('user ' + req.params.id);
});
app.param('range', /^(\w+)..(\w+)?$/);
app.get('/range/:range', function(req, res){
var range = req.params.range;
res.send('from ' + range[1] + ' to ' + range[2]);
});

app.render(view, [options], callback)

//配合模版引擎 更酸爽
app.render('email', function(err, html){
// ...});
app.render('email', { name: 'Tobi' }, function(err, html){
// ...});

有些模板引擎没有遵循这种转换, 这里有一个小项目[consolidate.js](https://github.com/visionmedia/consolidate.js) 专门把所有的node流行的模板引擎进行了包装,这样它们在Express内部看起来就一样了。

var engines = require('consolidate');
app.engine('haml', engines.haml);
app.engine('html', engines.hogan);

如果要详细资料 可以访问 
[看这里](http://expressjs.jser.us/3x_zh-cn/api.html)

> 这里需要补充的是 关于express的 req这个参数的一些知识,以及res.send() res.sendfile(),res.render() 

>下节会讲数据库 mongodb相关
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容