0

こんにちは皆さん、このチュートリアルに従ってステップ 9 に進みましたhttps://www.meteor.com/tutorials/react/security-with-methods

したがって、すべてのメソッドをチェック付きで記述しましたが、メソッド 'tasks.remove' の呼び出し中に Exception のようなエラーが発生します エラー: 一致エラー: 予想される文字列、オブジェクトを取得しました

ここに私の書いたコードがありますこれはtasks.jsです

import { Meteor } from 'meteor/meteor'
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)

    // Make sure the user is logged in before insterting a task
    if (!this.userId) {
      throw new Meteor.Error('not-authorized')
    }

    Tasks.insert({
      text,
      createdAt: new Date(),
      owner: this.userId,
      username: Meteor.users.findOne(this.userId).username
    })
  }, // tasks.insert
  'tasks.remove' (taskId) {
    check(taskId, String)

    Tasks.remove(taskId)
  },
  'tasks.setChecked' (taskId, setChecked) {
    check(taskId, String)
    check(setChecked, Boolean)

    Tasks.update(taskId, { $set: { checked: setChecked } })
  }
})

そして、これは Task.jsx です

import React, { Component, PropTypes } from 'react'
import { Meteor } from 'meteor/meteor'
// import { Tasks } from '../api/tasks.js'

// Task component - represents a single todo item
export default class Task extends Component {
toggleChecked () {
  // Set the checked value to the opposite of its current value
  Meteor.call('tasks.setChecked',this.props.task._id, !this.props.task.checked)
}

deleteThisTask () {
  Meteor.call('tasks.remove', this.props.task._id)
}
  render () {
    // Give tasks a different className when they are checked off,
    // so that we can style them nicely
    const taskClassName = this.props.task.checked ? 'checked' : ''
    return (
      <li className={taskClassName}>
        <button className="delete" onClick={this.deleteThisTask.bind(this)}>
          &times;
        </button>

        <input
          type="checkbox"
          readOnly
          checked={this.props.task.checked}
          onClick={this.toggleChecked.bind(this)}
        />

        <span className="text">
          <strong>{this.props.task.username}</strong>:{this.props.task.text}
        </span>
      </li>
    )
  }
}

Task.propTypes = {
  // This component gets the task to dipslay through a React prop.
  // We can use propTypes to indicate it is required
  task: PropTypes.object.isRequired
}

私の書いたコードがチュートリアルのコードと同じように見える問題は何ですか?なぜこれらのエラーが発生するのですか? update メソッドでも同じエラーが発生しました。

編集:チェックにコメントしてチュートリアルの後のステップを実行した後、チェックを有効にすると機能します...しかし、どの部分が機能したかはわかりません

4

2 に答える 2

0

チェック用のパラメーターとして渡したため、check関数は文字列を期待しています。Stringしかし、あなたの ReactTaskコンポーネントは Object.

Task.propTypes = {
  task: PropTypes.object.isRequired
}

ちょうど試して

'tasks.remove' (taskId) {
    check(taskId, Object)

    Tasks.remove(taskId)
},

それ以外の

'tasks.remove' (taskId) {
    check(taskId, String)

    Tasks.remove(taskId)
  },
于 2016-10-20T12:22:26.623 に答える
0

「オブジェクト」でまだエラーが発生します。javascript String() 関数を使用して入力を調整してみてください -

    'tasks.remove'(taskId) {
    check(String(taskId), String);

    Tasks.remove(taskId);
  },
  'tasks.setChecked'(taskId, setChecked) {
    check(String(taskId), String);
    check(setChecked, Boolean);

    Tasks.update(taskId, { $set: { checked: setChecked } });
  }, 
于 2018-05-01T06:53:55.187 に答える