我正在尝试使用Node.js为我的网络应用创建一个api。 api旨在将JSON数据返回给api用户。
例如,我有以下端点/对象: - 文章(文章集) - 文章(单篇文章,每篇文章都有标签) - 标签
每个拥有json数据格式的端点/对象都需要返回,例如:
文章:[{articleObject},{articleObject},{articleObject}]
第
{ id:12, 标题:'我很棒的文章*我说,我知道它', 内容:'blah blah blah blah', 标签:[{tagObject},{tagObject},{tagObject}] }
每个端点都可以调用其他端点来获取所需的数据,例如: 文章端点可以调用Tags端点来获取文章标签集合,Tags端点将返回Array Object。
我的问题:
如何管理Object结构,所以如果从另一个端点调用的端点将返回Array / Object,而从api用户调用时它将返回JSON字符串。
我应该为每个端点创建对象模板吗?这个过程将是:
模板引擎可以在对象模板下面处理并将它们视为变量,在PHP中我使用的Twig可以接收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);
}
}
}
希望有人能告诉我它的方法。
答案 0 :(得分:2)
我用快递做我的apis ......你可以这样做:
app.get('/api/article', authenticate, routes.api.article.get);
authenticate只是一个中间件功能,可以对用户进行身份验证,通常这会从会话中抓取用户并确保他们已登录。
里面./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);
});
};
这假设您正在使用mongoose和mongodb,并且具有与此类似的Article架构,其中包含对Tag架构的引用:
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 }
});