簡體   English   中英

在 Meteor.js 中更新帖子

[英]Updating a post in Meteor.js

我最近才開始嘗試學習 Meteor.js。 我的目的是構建一個新聞源功能,我可以在其中插入、編輯和刪除內容。 我被困在編輯部分。

進口/api/新聞/methods.js

    Meteor.methods({

  'news.insert'(content, title) {
    check(content, String);
    check(title, String);

    // Make sure the user is logged in before insertig content
    if (! Meteor.userId()) {throw new Meteor.Error('not-authorized');}

    return News.insert({
      content,
      title,
      createdAt: new Date(),
    });
  },

  'news.remove'(newsId) {
    check(newsId, String);
    News.remove(newsId);
  },

// Doesn't work?
'news.update'(content, title, newsId) {
  check(content, String);
  check(title, String);
  check(newsId, String);

  // user has to be logged in before updating content
  if (! Meteor.userId()) {throw new Meteor.Error('not-authorized');}

    News.update({_id: newsId}), {
      $set: {
        title:title, 
        content:content
      }
    }
  }

});

我插入了一條通往內容更新表單的路由:

<a href="/apc_news/{{_id}}">Edit</a>

更新表單: imports/ui/components/news_edit/news_edit.html

<template name="NewsEdit">
<div class="col">
    <small>Update: <b>{{news.content}}</b></small>
    <form class='news-link-update'> 
    <input type="text" name="content" value="{{news.content}}" required> <small>ID: {{news._id}}</small> <br> 
    <br>
    <textarea class="form-control" rows="5" id="comment" name="title" required>{{news.title}}</textarea> 
    <br>
    <input type="submit" name="update" value="Update News" class="submit">
    </form>
</div>
</template>

以及調用該方法的 js 文件: imports/ui/components/news_edit/news_edit.js

    import { News } from '/imports/api/news/news.js';
    import { Meteor } from 'meteor/meteor';
    import './news_edit.html';

    Template.NewsEdit.helpers({
      news: ()=> {
        var id = FlowRouter.getParam('id');
        return News.findOne({_id: id});
      }

    });


    Template.NewsEdit.events({
  'submit .news-link-update'(event) {
    event.preventDefault();


    const target = event.target;
    let newsId = target.dataset.newsId;
    const title = target.elements.title;
    const content = target.elements.content;

    Meteor.call('news.update', title.value, content.value, newsId, (error, result) => {
      if (error) {
        console.log(newsId);
        alert(error.reason);
      }  
  });
  },
});

我不再收到錯誤 400,而是收到 500 錯誤。 內部服務器錯誤。 現在引用了 id。

I20190222-04:22:58.230(1)? Exception while invoking method 'news.update' Error: Invalid modifier. Modifier must be an object.
I20190222-04:22:58.233(1)?     at MongoConnection._update (packages/mongo/mongo_driver.js:495:11)
I20190222-04:22:58.233(1)?     at MongoConnection.<anonymous> (packages\meteor.js:376:21)
I20190222-04:22:58.234(1)?     at MongoConnection.(anonymous function) [as update] (packages/mongo/mongo_driver.js:754:49)
I20190222-04:22:58.234(1)?     at _0xb3b0x8.(anonymous function).update (packages/mongo/collection.js:585:31)
I20190222-04:22:58.235(1)?     at _0xb3b0x8.(anonymous function).Mongo.Collection.(anonymous function) [as update] (packages/aldeed:collection2/collection2.js:213:19)
I20190222-04:22:58.236(1)?     at MethodInvocation.news.update (imports/api/news/methods.js:40:10)
I20190222-04:22:58.236(1)?     at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1767:12)
I20190222-04:22:58.237(1)?     at DDP._CurrentMethodInvocation.withValue (packages/ddp-server/livedata_server.js:719:19)
I20190222-04:22:58.237(1)?     at Meteor.EnvironmentVariable.EVp.withValue (packages\meteor.js:1304:12)
I20190222-04:22:58.238(1)?     at DDPServer._CurrentWriteFence.withValue (packages/ddp-server/livedata_server.js:717:46)
I20190222-04:22:58.239(1)?     at Meteor.EnvironmentVariable.EVp.withValue (packages\meteor.js:1304:12)
I20190222-04:22:58.239(1)?     at Promise (packages/ddp-server/livedata_server.js:715:46)
I20190222-04:22:58.242(1)?     at new Promise (<anonymous>)
I20190222-04:22:58.242(1)?     at Session.method (packages/ddp-server/livedata_server.js:689:23)
I20190222-04:22:58.243(1)?     at packages/ddp-server/livedata_server.js:559:43
I20190222-04:23:28.905(1)? Exception while invoking method 'news.update' Error: Invalid modifier. Modifier must be an object.
I20190222-04:23:28.906(1)?     at MongoConnection._update (packages/mongo/mongo_driver.js:495:11)
I20190222-04:23:28.910(1)?     at MongoConnection.<anonymous> (packages\meteor.js:376:21)
I20190222-04:23:28.911(1)?     at MongoConnection.(anonymous function) [as update] (packages/mongo/mongo_driver.js:754:49)
I20190222-04:23:28.911(1)?     at _0xb3b0x8.(anonymous function).update (packages/mongo/collection.js:585:31)
I20190222-04:23:28.912(1)?     at _0xb3b0x8.(anonymous function).Mongo.Collection.(anonymous function) [as update] (packages/aldeed:collection2/collection2.js:213:19)
I20190222-04:23:28.912(1)?     at MethodInvocation.news.update (imports/api/news/methods.js:40:10)
I20190222-04:23:28.913(1)?     at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1767:12)
I20190222-04:23:28.914(1)?     at DDP._CurrentMethodInvocation.withValue (packages/ddp-server/livedata_server.js:719:19)
I20190222-04:23:28.915(1)?     at Meteor.EnvironmentVariable.EVp.withValue (packages\meteor.js:1304:12)
I20190222-04:23:28.916(1)?     at DDPServer._CurrentWriteFence.withValue (packages/ddp-server/livedata_server.js:717:46)
I20190222-04:23:28.918(1)?     at Meteor.EnvironmentVariable.EVp.withValue (packages\meteor.js:1304:12)
I20190222-04:23:28.918(1)?     at Promise (packages/ddp-server/livedata_server.js:715:46)
I20190222-04:23:28.919(1)?     at new Promise (<anonymous>)
I20190222-04:23:28.920(1)?     at Session.method (packages/ddp-server/livedata_server.js:689:23)
I20190222-04:23:28.920(1)?     at packages/ddp-server/livedata_server.js:559:43
I20190222-04:25:34.580(1)? Exception while invoking method 'news.update' Error: Invalid modifier. Modifier must be an object.
I20190222-04:25:34.583(1)?     at MongoConnection._update (packages/mongo/mongo_driver.js:495:11)
I20190222-04:25:34.584(1)?     at MongoConnection.<anonymous> (packages\meteor.js:376:21)
I20190222-04:25:34.585(1)?     at MongoConnection.(anonymous function) [as update] (packages/mongo/mongo_driver.js:754:49)
I20190222-04:25:34.585(1)?     at _0xb3b0x8.(anonymous function).update (packages/mongo/collection.js:585:31)
I20190222-04:25:34.586(1)?     at _0xb3b0x8.(anonymous function).Mongo.Collection.(anonymous function) [as update] (packages/aldeed:collection2/collection2.js:213:19)
I20190222-04:25:34.587(1)?     at MethodInvocation.news.update (imports/api/news/methods.js:40:10)
I20190222-04:25:34.587(1)?     at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1767:12)
I20190222-04:25:34.588(1)?     at DDP._CurrentMethodInvocation.withValue (packages/ddp-server/livedata_server.js:719:19)
I20190222-04:25:34.593(1)?     at Meteor.EnvironmentVariable.EVp.withValue (packages\meteor.js:1304:12)
I20190222-04:25:34.594(1)?     at DDPServer._CurrentWriteFence.withValue (packages/ddp-server/livedata_server.js:717:46)
I20190222-04:25:34.594(1)?     at Meteor.EnvironmentVariable.EVp.withValue (packages\meteor.js:1304:12)
I20190222-04:25:34.594(1)?     at Promise (packages/ddp-server/livedata_server.js:715:46)
I20190222-04:25:34.595(1)?     at new Promise (<anonymous>)
I20190222-04:25:34.596(1)?     at Session.method (packages/ddp-server/livedata_server.js:689:23)
I20190222-04:25:34.597(1)?     at packages/ddp-server/livedata_server.js:559:43
I20190222-04:27:21.274(1)? Exception while invoking method 'news.update' Error: Invalid modifier. Modifier must be an object.
I20190222-04:27:21.277(1)?     at MongoConnection._update (packages/mongo/mongo_driver.js:495:11)
I20190222-04:27:21.278(1)?     at MongoConnection.<anonymous> (packages\meteor.js:376:21)
I20190222-04:27:21.279(1)?     at MongoConnection.(anonymous function) [as update] (packages/mongo/mongo_driver.js:754:49)
I20190222-04:27:21.280(1)?     at _0xb3b0x8.(anonymous function).update (packages/mongo/collection.js:585:31)
I20190222-04:27:21.280(1)?     at _0xb3b0x8.(anonymous function).Mongo.Collection.(anonymous function) [as update] (packages/aldeed:collection2/collection2.js:213:19)
I20190222-04:27:21.281(1)?     at MethodInvocation.news.update (imports/api/news/methods.js:40:10)
I20190222-04:27:21.282(1)?     at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1767:12)
I20190222-04:27:21.283(1)?     at DDP._CurrentMethodInvocation.withValue (packages/ddp-server/livedata_server.js:719:19)
I20190222-04:27:21.283(1)?     at Meteor.EnvironmentVariable.EVp.withValue (packages\meteor.js:1304:12)
I20190222-04:27:21.286(1)?     at DDPServer._CurrentWriteFence.withValue (packages/ddp-server/livedata_server.js:717:46)
I20190222-04:27:21.286(1)?     at Meteor.EnvironmentVariable.EVp.withValue (packages\meteor.js:1304:12)
I20190222-04:27:21.287(1)?     at Promise (packages/ddp-server/livedata_server.js:715:46)
I20190222-04:27:21.288(1)?     at new Promise (<anonymous>)
I20190222-04:27:21.289(1)?     at Session.method (packages/ddp-server/livedata_server.js:689:23)
I20190222-04:27:21.289(1)?     at packages/ddp-server/livedata_server.js:559:43

^ 這是新的錯誤日志。 無效的修飾符部分是什么意思?

您收到Error: Invalid modifier. Modifier must be an object. Error: Invalid modifier. Modifier must be an object. 由於服務器方法的update語句中的語法錯誤而導致的錯誤。

進口/api/新聞/methods.js

  Meteor.methods({
      ...
      news.update(content, title, newsId) {
          check(content, String);
          check(title, String);
          check(newsId, String);

          // user has to be logged in before updating content
          if (! Meteor.userId()) {throw new Meteor.Error('not-authorized');}
          // *** The parentheses was closed before '$set' was passed ***
          News.update({_id: newsId}, {
             $set: {
               title:title, 
               content:content
             },
             {
               multi:false // optional since by default it is false
             }
          });
       }     
  });

暫無
暫無

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

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