2014-03-28 25 views
0

以下代碼來自我正在做的教程。我想知道如何捕獲並回復發布的請求。我認爲這很容易理解,但問題如下。如何使用express.js,貓鼬和玉創建帖子請求

首先這裏是代碼:

節點

app.post('/tasks', function(req, res){ 
    var task = new Task(req.body.task); // This line 
    task.save(function (err) { 
    if (!err) { 
     res.redirect('/tasks/new'); 
    } 
    else { 
     throw err; 
    } 
    }); 
}); 

extends ../layout 

block content 
    h1 New task view 

    form(role='form', method='post', action='/tasks') 
    fieldset 
     legend Add a task 
     div.form-group 
     label Task 
     input(name='task[task]', class='form-control') // This line 
     button.btn.btn-primary(type='submit') Submit 
     button.btn.btn-default(type='reset') Clear 

貓鼬

mongoose.connect('mongodb://localhost/todo_development'); 
var Schema = mongoose.Schema; 
var ObjectId = Schema.ObjectId; 

var Task = new Schema({ 
    task: { type: String, required: true } 
}); 

var Task = mongoose.model('Task', Task); 

在上面的兩個代碼塊中,每個代碼都有一個名爲'this line'的註釋。在這些行中,作爲屬性/屬性的是任務。當我將它們更改爲其他類似'oink'的代碼時,它會破壞代碼。

因此,舉例來說,如果我做的:

節點

var task = new Task(req.body.oink); // This line 

input(name='oink[oink]', class='form-control') // This line 

它沒有worky。 我不知道爲什麼以及如何正確地發佈帖子請求。 :(

+0

也許使用'input(name ='oink')'?我不明白你爲什麼用方括號重複它 – alex

+0

它是教程編寫的方式。它就像那本書一樣。我想這可能是一個玉會議或什麼的。你的想法不起作用。我收到一個錯誤。500 TypeError:不能使用'in'操作符在adf中搜索'_id' – William

+0

我想到括號引用模式 – William

回答

0

嘗試改變這一行

var task = new Task(req.body.task); 

要這樣:

var task = new Task(req.body); 

我不是很熟悉的翡翠,但據我可以從Submit Jade form告訴您應該爲您的輸入像...

input(id='password',type='password',value='',placeholder='',name='password') 

此外,什麼是你的貓鼬的架構是什麼樣子?這可能會有幫助。

您已經定義了變量「Task」兩次。試試這個...

var taskSchema = new Schema({ 
    task: { type: String, required: true } 
}); 

var Task = mongoose.model('Task', taskSchema); 
+0

中的任務對象,這是行不通的。 – William

+0

似乎你的問題的根源在於你的輸入的命名。請參閱編輯。 – aedballs

+0

我添加了貓鼬模式 – William

0

地說: 輸入(名稱= '任務[]' 的class = '的形式制')//此行

,並把這個: VAR任務=新任務({ '任務':req.body.task}); // This line

luck

+1

你可以擴展你在上面做什麼來解釋變化嗎? – Pre101

+0

在jade文件中,名稱「task」被調用到節點文件,但到[]中的名稱就像節點文件中的一個變量,我不知道爲什麼不工作你的代碼,但另一種方式是我如何放置它。不發送變量名稱int [],創建變量i節點文件:{'task':req.body.task}。 pdt:我認爲麻煩在於構造函數「proto」。對不起英文。 – Diego