簡體   English   中英

流星錯誤調用方法['questions.insert]:找不到方法'questions.insert'

[英]Meteor error invoking method ['questions.insert]: Method 'questions.insert' not found

我正在嘗試將一個表單(包含測試問題)提交到名為問題的mongo集合中。 我已經引用了運行服務器端代碼的文件,我認為它應該都可以正常工作。 這是我的代碼:

//add.html

 <template name="add"> <h3>This is the add questions page</h3> <form class="add-questions"> <label>Subject</label> <br> <input type="text" name="subject" placeholder="Maths" value="subject"> <br> <label>Topic</label> <br> <input type="text" name="topic" placeholder="IE Algebra" value="topic"> <br> <label>Level</label> <br> <input type="number" name="level" value="3"> <br> <label>Marks</label> <br> <input type="number" name="marks" value="5"> <br> <label>Date</label> <br> <select name="month"> <option> - Month - </option> <option value="jan">January</option> <option value="feb">February</option> <option value="mar">March</option> <option value="apr">April</option> <option value="may">May</option> <option value="jun">June</option> <option value="jul">July</option> <option value="aug">August</option> <option value="sep">September</option> <option value="oct">October</option> <option value="nov">November</option> <option value="dec">December</option> </select> <select name="year"> <option> - Year - </option> <option value="16">2016</option> <option value="15">2015</option> <option value="14">2014</option> <option value="13">2013</option> <option value="12">2012</option> <option value="11">2011</option> <option value="10">2010</option> <option value="9">2009</option> <option value="8">2008</option> <option value="7">2007</option> <option value="6">2006</option> <option value="5">2005</option> <option value="4">2004</option> <option value="3">2003</option> <option value="2">2002</option> <option value="1">2001</option> <option value="0">2000</option> </select> <br> <label>Question</label> <br/> <textarea name="question" class="question" id="question" form="add-question" placeholder="Please enter the question here as plane text" value="questionArea"></textarea> <br> <label>Awnser</label> <br/> <textarea name="answer" class="answer" form="add-question" placeholder="Please enter the question here as plane text" value="answerArea"></textarea> <br> <input id="submitbutt" type="submit" name="submit" value="Submit"> <a href="/" id="cancel">Cancel</a> <br> </form> </template> 

//add.js

 import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { ReactiveDict } from 'meteor/reactive-dict'; import { Questions } from '../../api/questions.js'; import './add.html'; Template.add.events({ 'click #cancel'(event, instance) { event.preventDefault(); if(confirm("Are you sure you want to cancel?")) { window.location.assign("/"); } }, 'submit .add-questions'(event) { event.preventDefault(); const target = event.target; const questionId = Random.id; const questionSubject = target.subject.value; const questionTopic = target.topic.value; const questionLevel = target.level.value; const questionMarks = target.marks.value; const month = target.month.value; const year = target.year.value; const questionDate = month + " " + year; const questionQuestion = $('textarea.question').get(0).value; const questionAnswer = $('textarea.answer').get(0).value; console.log("adding: ", questionId, questionSubject, questionTopic, questionLevel, questionMarks, questionDate, questionQuestion, questionAnswer); Meteor.call('questions.insert', questionId, questionSubject, questionTopic, questionLevel, questionMarks, questionDate, questionQuestion, questionAnswer); console.log("added"); //redirect }, }); Template.add.helpers({ thisQuestion() { const questionId=FlowRouter.getParam("questionId"); console.log("Adding question: ", questionId); return Questions.findOne({"_id": questionId}); }, }); 

//questions.js

 import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; import { check } from 'meteor/check'; export const Questions = new Mongo.Collection('questions'); if (Meteor.isServer) { // This code only runs on the server // Only publish events that belong to the current user Meteor.publish('questions', function questionsPublication() { return Questions.find(); console.log("published questions"); //return Venues.find(); }); } Meteor.methods({ 'questions.insert'(id, subject, topic, level, marks, date, question, answer) { console.log("run questions.insert"); // Make sure the user is logged in before inserting a task if (! this.userId) { throw new Meteor.Error('not-authorized'); } Questions.insert({ id, subject, topic, level, marks, date, question, answer }); }, }); 

任何幫助將不勝感激。 :)

看來您正在使用Meteor 1.3+的ES2015模塊支持和/imports目錄延遲加載。 考慮到這一點,在add.js文件中,您將導入questions.js文件,其中包含您的questions.insert方法定義。 這意味着您的視圖可以在客戶端正確找到此Method。 但是,方法必須在客戶端和服務器端都可用,或者僅在服務器端可用。 要解決您的錯誤,您需要通過在啟動時引用questions.js文件來確保您的方法在服務器端也可用。 就像是:

/server/main.js

import '/imports/startup/server/register_api';

/imports/startup/server/register_api.js

import '../../api/questions.js';

這將觸發服務器上的Meteor.methods調用,並注冊缺少的questions.insert方法。

暫無
暫無

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

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