2012-10-05 186 views
0

我正在尝试使用Node.js为我的web应用程序创建api。 api旨在将JSON数据返回给api用户。如何使用Node.js服务api时管理数据模板

例如,我有以下端点/对象: - 文章(文章的集合) - 文章(单篇文章,每篇文章都将是具有标签) - 标签

每个端点/对象有他们拥有JSON格式数据需要返回,例如在:

  • 文章:[{articleObject},{articleObject},{articleObject}]

  • 氩视察员

    { ID:12, 标题:“我真棒文章*我说,我知道它, 内容: '等等等等等等等等', 标签:[{tagObject},{tagObject},{ tagObject}] }

每个端点可以打电话到另一个端点获得所需的数据,例如: 条端点可以调用标签端点获得的商品标签收藏,标签端点将返回数组对象。

我的问题:

  1. 如何管理对象结构,因此,如果从另一个端点,它将返回数组/对象调用,而这将是端点返回JSON字符串从用户API调用时。

  2. 我应该为每个端点创建对象模板吗?该过程将是:

    • 端点将调用对象模板;
    • 对象模板将从数据库中提取数据;
    • 端点将从其他端点调用时返回对象模板;
    • 端点将调用模板引擎为api用户解析对象模板为JSON字符串。将为每个端点提供JSON字符串视图。
  3. 什么模板引擎可以处理以下对象模板,并把它们作为变量,在PHP中我使用的树枝,可以接收PHP对象,并把它们作为变量。 Here you can find how i do that using Twig

对象模板文件内容例如:

var Tags = require('./tags'); 

module.exports = function(param){ 
    /* do fetching data from database for specified parameters */ 
    /* here */ 
    var data = {}; 

    return { 
    id: function() { 
     return data.id; 
    }, 
    title: function() { 
     return data.title; 
    }, 
    description: function() { 
     return data.description; 
    }, 
    tags: function() { 
     return Tags(data.id); 
    } 
    } 
} 

希望有人能告诉我它的方式。

回答

2

我使用express来做我的apis ...你可以做这样的事情:

app.get('/api/article', authenticate, routes.api.article.get); 

身份验证仅仅是一个中间件功能对用户进行认证,通常这是从抓住会话的用户,并确保他们在登录

内./routes/。 api.js

var Article = require('../models/article.js'); 

exports.api = {} 
exports.api.article = {} 
exports.api.article.get = function(req, res){ 
//get article data here 
Article.find({created_by: req.session.user._id}).populate('tags').populate('created_by').exec(function(err, list){ 
    res.json(list); 
}); 
}; 

此假设你正在使用的猫鼬和MongoDB,并有类似这样的项目架构,其中包括标签模式的参考:

var ArticleSchema = new Schema({ 
    name : { type: String, required: true, trim: true } 
    , description: { type: String, trim: true } 
    , tags : [{ type: Schema.ObjectId, ref: 'Tag', index: true }] 
    , created_by : { type: Schema.ObjectId, ref: 'User', index: true } 
    , created_at : { type: Date } 
    , updated_at : { type: Date } 
}); 
+0

你的解决方案很好,但我不能实现,因为我没有使用mongoose和mongodb,我使用的是一个相当复杂的关系的MySQL。虽然我意识到用我当前的表结构无法实现我想要在我的问题中描述的内容,因为应该执行太多的查询回调来获取所有必需的数据。 Thx btw – sule

+0

你有模型的文件吗?你可以逐个加载每个模型,通过回调,然后在最后一次回调到'res.json(all_data)' – chovy

+0

是的,我有他们,我正是这样做,但要维护什么数据以及如何数据应该呈现给api用户将来会非常烦人。 – sule

相关问题