美文网首页程序员
给你的iOS应用配个node.js服务器(二)

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

作者: 寒枫傲天 | 来源:发表于2016-10-27 18:09 被阅读113次

    上集说道 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相关

    相关文章

      网友评论

        本文标题:给你的iOS应用配个node.js服务器(二)

        本文链接:https://www.haomeiwen.com/subject/pkksuttx.html