我开始学习一些关于NodeJS
的教程和一些书籍,并开始使用Mongoose
和Rest API请求来测试内容。
我遇到的问题与构造函数的创建有关,该构造函数将获取参数(requestBody),然后在模块上实现整个绑定(在我的案例user.js
上)。这是为了使代码更可重用,用户模块处理绑定而不是服务器模块,这将大大增加源代码。
下面的代码正常工作,但效率不高
var express = require('express')
, bodyParser = require('body-parser')
, expressValidator = require('express-validator')
, mongoose = require('mongoose');
var router = express.Router();
router.route('/users')
// Create a user (accessed at POST http://localhost:8080/api/users)
.post(function (req, res) {
// Bind user (repeating the same procedure for every User object)
var user = new User();
user.info.name = req.info.name;
user.info.surname = req.info.name;
.... // around 10 other properties
req.info.birthday = req.info.name;
// Save
user.save(function (err) {
.... // Handling completion
});
})
// app/models/user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
info: {
name: {type: String, required: true},
surname: {type: String, required: true},
......
birthday: {type: String, required: true}, // dd/mm/yyyy
},
likes: [Schema.Types.ObjectId],
dislikes: [Schema.Types.ObjectId]
});
function initUser(model) {
userSchema.info.name = model.info.name;
userSchema.info.surname = model.info.surname;
......
userSchema.info.birthday = model.info.birthday;
userSchema.likes = model.likes;
userSchema.dislikes = model.dislikes;
}
module.exports = mongoose.model('User', userSchema);
module.exports.initUser = initUser;
基于此代码,我可以轻松使用请求(Javascript初学者,所以解释会很棒)
var user = new User();
user.initUser(req);
但是我想出了一个非常长的错误,导致服务器崩溃并且最干净的消息是:
TypeError:将循环结构转换为JSON
有没有人解决了这个问题?我也看了Mongoose site,但似乎没有这样的具体事情。
答案 0 :(得分:1)
我不确定您的循环json问题,但您最初的问题是您根据请求阅读模型属性的方式。
如果将值发布到该端点,则您要查找的json值将位于请求的body属性上。通过你的功能:
user.initUser(req.body)
您需要在express中安装一个正文解析器才能正确处理该值。一旦你完成了并传递了request.body,你的方法就可以了。
专业提示:不要单独映射属性。如果键被正确命名,只需使用它们直接构建模型。