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

Posted

技术标签:

【中文标题】node-restful 不将文档“内容”保存到 MongoDb【英文标题】:node-restful not saving Document "contents" to MongoDb 【发布时间】:2015-01-07 07:36:37 【问题描述】:

我正在尝试使用 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);

nodemon 在运行 server.js 时的输出是

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 扩展程序填充数据库,创建了一个空文档,但没有我以键值对形式发布的数据。叫“戴夫”

总而言之,我通过 node-restuful 和 mongoose 向 mongodb 发送数据,尽管创建了文档,但它不包含数据。谁能看出问题所在?

【问题讨论】:

有同样的问题。如果你不这样做,我很快就会悬赏。 【参考方案1】:

在邮递员中添加标题

Content-Type : application/json

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

【讨论】:

【参考方案2】:

我从不对 *** 发表评论,但这对我来说是个问题好几次了,而且我似乎一直遇到这个问题。所以,我想帮助大家。

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

不要将: 包含在Context-type 中。

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

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

始终建议键应该是单个字符串(必要时使用驼峰符号)。作为所谓的编程老手,

虽然由于符号的原因,如果 JSON 对象的键是变量而不是字符串,我虽然邮递员会处理,但这可能是邮递员的问题。一张图片说明一千个单词,所以我附上了一张图片。

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

问候!

昆汀·梅奥。

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于node-restful 不将文档“内容”保存到 MongoDb的主要内容,如果未能解决你的问题,请参考以下文章

如何直接保存到持久存储,而不将数据保存到内存中

如何压缩整个文件夹(带有子文件夹)并通过 Flask 提供它而不将任何内容保存到磁盘

如何在不将旧根保存在堆栈中的情况下切换到新根?

如何在不将数据保存到数据库的情况下更新 Gridview 行

如何强制 div 位于视口的顶部/底部,同时不将其从文档流中取出?

不将 Json 数据保存到文件中