node-restful not saving将文档“内容”保存到MongoDb

时间:2014-11-10 21:27:54

标签: javascript node.js mongodb rest mongoose

我正在尝试使用NodeJS将文档保存到MongoDb。 我正在使用Express,Mongoose,Node-Restful来为我做艰苦的工作。但是,尽管它确实在MongoDb中创建了文档,但它们并不是实际内容。我只得到

  

[       {           “_id”:“5460ab83c9e8f9481063df82”,           “__v”:0       },       {           “_id”:“5460ac00c9e8f9481063df83”,           “__v”:0       },       {           “_id”:“5460ae36c9e8f9481063df85”,           “__v”:0       },       {           “__v”:0       },       {           “_id”:“5460afb6be7938bc1469ae97”,           “__v”:0       },       {           “_id”:“5460fe9088d68e2516cdf572”,           “__v”:0       },       {           “_id”:“5460fecfd47cba3916fba0ab”,           “__v”:0       },       {           “_id”:“5460fed5d47cba3916fba0ac”,           “__v”:0       },       {           “_id”:“5460fed8d47cba3916fba0ad”,           “__v”:0       },       {           “_id”:“5460ff079b60285016dfd0da”,           “__v”:0       }   ]

正如您所看到的那样,实际内容未被保存,出于测试目的,这只是一个名称。

我的架构(models / users.js)

var restful = require('node-restful');
var mongoose = restful.mongoose;

var userSchema = new mongoose.Schema({
name: String
});


module.exports = restful.model('user',userSchema );

我的api(api / api.js)

var express = require('express');
var router = express.Router();


var userModel = require('../models/users')

userModel.methods(['get','put','post','delete']);
userModel.register(router,'/user');

module.exports = router;

和应用代码(server.js)

console.log("Adding Requires");
var express = require('express');
var fs = require('fs');
var urlEncoded = require('urlencoded-request-parser');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var override = require('method-override');
var rest = require('node-restful');

console.log("Creating Server Object");
var server = express();
server.locals.moment = require('moment');
server.set('ServerVersion', "5.0.1.7");

console.log("Server setting port");
var port = process.env.port || 1337;

console.log("Connecting to MongooseDB");

mongoose.connect("mongodb://mvm-mongodb.cloudapp.net/ccslabs-main");

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
  console.log('Connected to MongoDB successfully');
});


server.disable('x-powered-by');

console.log("Server setting uses");
server.use(urlEncoded());
server.use(bodyParser.urlencoded({extended: true}));
server.use(bodyParser.json());
server.use(override());


console.log("Server setting routes");
var routePath="./routes/"; 
fs.readdirSync(routePath).forEach(function(file) {
    var route=routePath+file;
    console.log("\tAdding routes: " + route)
    require(route)(server);
});

console.log("\tAdding API routes");
server.use('/api',require('./api/api'));

console.log("\tAdding Static Files routes");
server.use(express.static(__dirname + "/content"));

console.log("Server creating sets");
server.set('view engine', 'ejs');
server.set('views', __dirname);

server.listen(port);
console.log("Server listening on port " + port);

运行server.js时nodemon的输出

Adding Requires
Creating Server Object
Server setting port
Connecting to MongooseDB
Server setting uses
Server setting routes
        Adding routes: ./routes/home.js
        Adding routes: ./routes/login.js
        Adding routes: ./routes/submission.js
        Adding routes: ./routes/testing.js
        Adding API routes
        Adding Static Files routes
Server creating sets
Server listening on port 1337
Connected to MongoDB successfully

我使用Postman chrome扩展程序填充数据库,创建一个空文档而没有以密钥值对的形式发布的数据。名字“戴夫”

Postman output

总而言之,我通过node-restuful和mongoose将数据发送到mongodb,但是,虽然创建了文档,但它不包含数据。有谁能看到这个问题?

3 个答案:

答案 0 :(得分:3)

在邮递员

中添加标题

Content-Type : application/json

而不是使用表单字段,使用原始json发送它。为我工作。

答案 1 :(得分:2)

我从未对stackoverflow发表评论,但这对我来说是个问题好几次,而且我似乎一直在努力。所以,我想帮助大家。

首先将标题设置为Content-Type : application/json

请勿将:加入Context-type

其次选择raw作为输入类型。虽然这不是JSON教程,但邮递员会注意单引号和双引号之间的区别。

使用双引号,即",不是'而不是''。其次,双引号键,如果键的值是一个字符串,则双引表达式。

始终建议键应为单个字符串(必要时使用驼峰表示法)。作为一名所谓的编程老手,

我虽然postman会处理如果JSON对象的键是变量而不是字符串因为符号但可能是postman的问题。一张图片说了千言万语,所以我加了一张图片。

请注意,如果您在添加特定密钥时遇到问题,则可能是您的模型。去年轻的蚱蜢。 (A)lways(B)e(C)oding

问候!

昆文梅奥。

P.S我与Postman没有任何关系,但我强烈建议任何尝试使用API​​的人。

我发布的图片不够发布,所以如果有人对我进行了验证,请随时在此页面上重新发布图片(我只想帮助其他人)。 http://postimg.org/image/6xmto3elj/

答案 2 :(得分:2)

对我有用的是选择 x-www-form-urlencoded ,而不是 form-data

的默认选择