簡體   English   中英

如何使用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)

});

這是我的導入/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({
      
    });
  })
}

您的方法定義看起來不錯並且應該可以工作(包括插入到集合中)。 但是您不需要一種方法來執行服務器端功能。 由於您的套接字服務器似乎也在服務器上運行(應該如此),您可以直接從那里插入到集合中。 例如:

  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
      })
    }))
  }))

當然,由於它在服務器上運行,因此這些插入沒有“當前用戶”的概念。 你怎么知道接收到的數據是誰的? 那部分數據是否來自套接字? 一旦您知道您可以添加代碼以將其添加為方法定義中的ownerusername ,這就是我假設您想要的架構。


PS:根據評論中提到的錯誤更新

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM