如何使用 meteor 将数据插入服务器端 main.js 的集合中?
How can I insert data to my collection on my server-side main.js with meteor?
我是流星新手,正在尝试修改教程代码,我的服务器端有一个代码监听包main.js。我还需要将打印在控制台上的数据插入到我的数据库集合中。
import { Meteor } from 'meteor/meteor';
import '/imports/api/tasks';
import { createServer } from "net";
import { Tasks } from "../imports/api/tasks"
Meteor.startup(() => {
const server = createServer(socket => {
socket.write("SEND OK")
socket.on("data", data => {
const text = data.toString();
console.log(text);
})
})
server.listen(8080)
});
这是我 imports/API 文件夹中我的数据库的代码。我无法使用流星方法插入。正确的做法是什么?
import { Mongo } from 'meteor/mongo';
import { check } from 'meteor/check';
export const Tasks = new Mongo.Collection('tasks');
Meteor.methods({
'tasks.insert'(text) {
check(text, String);
Tasks.insert({
text,
createdAt: new Date,
owner: this.userId,
username: Meteor.users.findOne(this.userId).username
})
},
'tasks.remove'(taskId) {
check(taskId, String);
const task = Tasks.findOne(taskId);
Tasks.remove(taskId);
},
});
if (Meteor.isServer) {
Meteor.publish('tasks', function() {
return Tasks.find({
});
})
}
您的方法定义看起来不错并且应该可以工作(包括插入到集合中)。但是您不需要一种方法来执行 server-side 功能。由于您的套接字服务器似乎也在服务器上 运行 (应该如此),因此您可以直接从那里插入到集合中。例如:
const server = createServer(Meteor.bindEnvironment(socket => {
socket.write("SEND OK")
socket.on("data", Meteor.bindEnvironment(data => {
const text = data.toString();
console.log(text);
Tasks.insert({
text,
createdAt: new Date
})
}))
}))
当然,因为那是 运行ning 在服务器上,所以对于这些插入没有“当前用户”的概念。你怎么知道接收到的数据是给谁的?那部分数据来自套接字吗?一旦您知道可以添加代码以将其添加为 owner
和 username
,就像您在方法定义中所做的那样,这就是我假设您想要的模式。
PS:根据评论中提到的错误更新
我是流星新手,正在尝试修改教程代码,我的服务器端有一个代码监听包main.js。我还需要将打印在控制台上的数据插入到我的数据库集合中。
import { Meteor } from 'meteor/meteor';
import '/imports/api/tasks';
import { createServer } from "net";
import { Tasks } from "../imports/api/tasks"
Meteor.startup(() => {
const server = createServer(socket => {
socket.write("SEND OK")
socket.on("data", data => {
const text = data.toString();
console.log(text);
})
})
server.listen(8080)
});
这是我 imports/API 文件夹中我的数据库的代码。我无法使用流星方法插入。正确的做法是什么?
import { Mongo } from 'meteor/mongo';
import { check } from 'meteor/check';
export const Tasks = new Mongo.Collection('tasks');
Meteor.methods({
'tasks.insert'(text) {
check(text, String);
Tasks.insert({
text,
createdAt: new Date,
owner: this.userId,
username: Meteor.users.findOne(this.userId).username
})
},
'tasks.remove'(taskId) {
check(taskId, String);
const task = Tasks.findOne(taskId);
Tasks.remove(taskId);
},
});
if (Meteor.isServer) {
Meteor.publish('tasks', function() {
return Tasks.find({
});
})
}
您的方法定义看起来不错并且应该可以工作(包括插入到集合中)。但是您不需要一种方法来执行 server-side 功能。由于您的套接字服务器似乎也在服务器上 运行 (应该如此),因此您可以直接从那里插入到集合中。例如:
const server = createServer(Meteor.bindEnvironment(socket => {
socket.write("SEND OK")
socket.on("data", Meteor.bindEnvironment(data => {
const text = data.toString();
console.log(text);
Tasks.insert({
text,
createdAt: new Date
})
}))
}))
当然,因为那是 运行ning 在服务器上,所以对于这些插入没有“当前用户”的概念。你怎么知道接收到的数据是给谁的?那部分数据来自套接字吗?一旦您知道可以添加代码以将其添加为 owner
和 username
,就像您在方法定义中所做的那样,这就是我假设您想要的模式。
PS:根据评论中提到的错误更新