如何使用 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 在服务器上,所以对于这些插入没有“当前用户”的概念。你怎么知道接收到的数据是给谁的?那部分数据来自套接字吗?一旦您知道可以添加代码以将其添加为 ownerusername,就像您在方法定义中所做的那样,这就是我假设您想要的模式。


PS:根据评论中提到的错误更新