自定义构造函数猫鼬
Custom constructor Mongoose
我开始学习一些关于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);
但是我想出了一个很长的错误,导致服务器崩溃,最干净的消息是:
类型错误:将循环结构转换为 JSON
问题
有没有人解决这个问题?我也看了一下猫鼬网站,但似乎没有这样具体的东西。
我不确定您的循环 json 问题,但您的初始问题是您从请求中读取模型属性的方式。
如果将值发布到该终结点,则要查找的 json 值将位于请求的 body 属性上。将函数传递给以下内容:
user.initUser(req.body)
您需要在 express 中安装正文解析器才能正确处理该值。一旦你完成了这个并传入request.body,你的方法就会起作用。
专业提示:不要费心单独映射属性。如果键的名称正确,只需使用它们直接构造模型即可。
相关文章:
- 在构造函数中定义函数会比将其附加到原型消耗更多的内存
- 在Javascript构造函数中定义属性的正确方式
- AngularJS和Angular Snap:SSnap构造函数未定义
- AngularJS typeahead添加了按函数自定义排序
- 为什么要在构造函数中定义事件处理程序成员函数(内联)以便使用“unbind”
- 为什么方法总是添加到原型中,而不是在构造函数中定义
- JavaScript 构造函数在定义属性时返回解析错误
- 未在自定义 OL3 控件的构造函数中定义的原型属性
- 使用闭包创建的私有函数如何访问构造函数中定义的变量
- 在构造函数中定义时未定义的类变量
- 在构造函数上定义方法
- 在构造函数中定义的Javascript数组在原型中未定义
- JavaScript函数-自定义小部件- Appcelerator合金
- 如何在构造函数中定义局部函数.Javascript中的原型
- 在构造函数中定义悬停效果
- 在对象构造函数中定义方法和将方法附加到构造函数的原型对象中有什么有用的区别吗?
- JavaScript类/构造函数vs定义函数
- JavaScript:在构造函数中定义函数而不是使用原型——区别是什么?
- JS-构造函数(自定义库)中的JSON/ARRAY传递变量
- 理解Javascript构造函数:自定义create方法