【发布时间】:2015-06-17 11:10:21
【问题描述】:
使用 Node + Express + Mongoose + node-restful
https://github.com/baugarten/node-restful
我面临的问题是过滤子实体数据。
Node-restful的Model Schema定义如下
//Schema
var postSchema = new mongoose.Schema({
title: { type: 'String', required: true },
content: { type: 'String', required: true },
tags: [{ name : {type: 'String'} }]
});
当我执行获取请求时,这就是我得到的 这是正确的,因为我只有两条记录。
http://localhost:3000/api/post
[
{
"_id": "5529866ae1ad43bd95d6b335",
"title": "amazon My Post",
"content": "dasdd This is a post with some tags",
"tags": [
{
"name": "amazon"
},
{
"name": "tracking"
}
]
},
{
"_id": "55298674e1ad43bd95d6b336",
"title": "flipkart My Post",
"content": "dasdjkjfkajd This is a post with some tags",
"tags": [
{
"name": "flipkart"
},
{
"name": "tracking"
}
]
}
]
我想做这样的事情 http://localhost:3000/api/post/?tags.name=amazon
它应该只返回一条记录,它的 tag.name 为“amazon”
如果我在 mongodb 上触发 db.getCollection('posts').find({ "tags.name" : "amazon"}) 这工作正常,我如何让它与 node-restful 一起工作
[
{
"_id": "5529866ae1ad43bd95d6b335",
"title": "amazon My Post",
"content": "dasdd This is a post with some tags",
"tags": [
{
"name": "amazon"
},
{
"name": "tracking"
}
]
}
]
而是将所有结果返回给我。
我哪里错了。
有没有更好的方法在 mongo db 中存储标签
我的代码如下
server.js
// Dependencies
var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
// MongoDB
mongoose.connect('mongodb://localhost/NodeMongo');
// Express
var app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
//Enable CORS
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
app.use('/api',require('./routes/api'));
// Start Server
app.listen(3000);
console.log('Api is running on port 3000');
api.js
// Dependencies
var express = require('express');
var router = express.Router();
Post.methods(['get', 'post', 'put', 'delete']);
Post.register(router, '/post');
module.exports = router;
post.js
// Dependencies
var restful = require('node-restful');
var mongoose = restful.mongoose;
//Schema
var postSchema = new mongoose.Schema({
title: { type: 'String', required: true },
content: { type: 'String', required: true },
tags: [{ name : {type: 'String'} }]
});
//Return model
module.exports = restful.model('Posts', postSchema);
【问题讨论】:
标签: node.js rest express mongoose