[英]How to pass data to Mongodb using Node.js, websocket and total.js
我正在尝试使用Websocket和total.js将数据传递到Mongodb。 单击保存按钮后,可以在我的homepage.html
中获取用户输入并通过websocket连接到服务器。
在default.js
是我的服务器端代码。 此时,应用程序帽子已获得用户输入并正确连接到服务器,但是现在如何将数据保存到mongodb?
这是我的homepage.html
<br />
<div>
<input type="text" name="message" placeholder="Service" maxlength="200" style="width:500px" />
<button name="send" >Save</div>
</div>
<br />
<script type="text/javascript">
var socket = null;
$(document).ready(function() {
connect();
$('button').bind('click', function() {
if (this.name === 'send') {
console.log(send());
return;
}
});
});
function connect() {
if (socket !== null)
return;
socket = new WebSocket('ws://127.0.0.1:8000/');
socket.onopen = function() {
console.log('open');
};
socket.onmessage = function(e) {
var el = $('#output');
var m = JSON.parse(decodeURIComponent(e.data)).message;
el.val(m + '\n' + el.val());
};
socket.onclose = function(e) {
// e.reason ==> total.js client.close('reason message');
console.log('close');
};
}
function send() {
var el = $('input[name="message"]');
var msg = el.val();
if (socket !== null && msg.length > 0)
socket.send(encodeURIComponent(JSON.stringify({ message: msg })));
el.val('');
return msg;
}
这是我的default.js
exports.install = function(framework) {
framework.route('/', view_homepage);
framework.route('/usage/', view_usage);
framework.websocket('/', socket_homepage, ['json']);
};
function view_usage() {
var self = this;
self.plain(self.framework.usage(true));
}
function view_homepage() {
var self = this;
self.view('homepage');
}
function socket_homepage() {
var controller = this;
controller.on('open', function(client) {
console.log('Connect');
});
controller.on('message', function(client, message) {
console.log(message);
/*
var self = this;
var message = MODEL('message').schema;
var model = self.body;
var message = new message({ message: model.message }).save(function(err) {
if (err)
self.throw500(err);
// Read all messages
message.find(self.callback());
});
*/
});
controller.on('error', function(error, client) {
framework.error(error, 'websocket', controller.uri);
});
}
任何帮助请!
---更新---
在此功能中,我用于将数据保存到MongoDB,但没有出现任何错误。也没有将数据保存到数据库。我不确定我的代码是写还是写错
controller.on('message', function(client, message) {
console.log(message);
/*
var self = this;
var message = MODEL('message').schema;
var model = self.body;
var message = new message({ message: model.message }).save(function(err) {
if (err)
self.throw500(err);
// Read all messages
message.find(self.callback());
});
*/
});
这是我的mongoose.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://totaldemo:123456@ds029979.mongolab.com:29979/totaldemo');
global.mongoose = mongoose;
这是我的user.js
var userSchema = mongoose.Schema({ user: String})
exports.schema = mongoose.model('user', userSchema,'user');
exports.name = 'user';
我根本不了解totaljs框架,但是我已经发现普通javascript已经存在一些问题。
首先,我建议您像这样设置模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
user: String
});
module.exports = mongoose.model('User', userSchema);
然后在控制器中,当您导入时:
var User = require('path/to/user/file')
您可以像这样立即使用它:
User.find()
另外-我完全不知道你以后在做什么。 您定义了user
模型,并导出了“ STRING”以外的内容。 唯一要做的是,当您将该用户导入变量User
, User.name
将===转换为'user
'字符串。 因此在您的示例中它将是:
var User = require('path/to/user/model/file')
console.log(User.name) // prints 'user'
仅此而已! 该出口没有附加模型。 也许它是totaljs的工作方式,但我对此非常怀疑。
稍后-您尝试使用消息模型。 它来自哪里? 您定义的是用户模型,而不是消息模型。
另一件事-正如我所说-我不知道totaljs,但是我怀疑它要求YOu定义var model
,然后再也不使用变量model
。
我强烈建议首先将纯节点与猫鼬一起使用,然后尝试将其与任何全栈集成。
可以肯定的是,这不是一个解决方案,但也许它指出了您的代码中的一些问题并会有所帮助。
编辑:
我快速浏览了totaljs,它看起来您确实应该导出字符串(这有点奇怪,并且在做魔术:)),但是它不是猫鼬,我想它只能与本机totaljs模型解决方案一起使用。 您不能像这样使用mongoose和totaljs。 我不知道有多少不使用本机totaljs模型系统会破坏框架的其他选择,但使用本机可能更安全。
老实说,我没有时间更深入地研究文档,但是Google在TotalJS文档中没有提到SQL甚至mongo ...所以,您必须弄清楚:)
EDIT2我发现https://github.com/totaljs/examples/tree/master/mongoose ,它看起来很奇怪...检查该示例是否有效(看起来像您看到的那样,您的代码很相似:))。 检查您是否在使用mongod,检查是否可以从纯节点连接...
老实说对不起,我投降了。 Totaljs对我来说具有极大的魔力和抽象性,可以帮助您解决这个:(。希望您能找到答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.