2012-10-05 218 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

相關問題