1

こんにちは、私はこのチュートリアルを進めていて、問題に遭遇しました。

私のedit.jadeファイルにはこれがあります-

form(method="POST", action="/users/")
    input(type="hidden", name="_method", value="PUT")
p Name:
    input#name(type="text", name="name", value="#{user.name}")
p Email:
    input#email(type="email", name="email", value="#{user.email}")
p Age:
    input#age(type="number", name="age", value="#{user.age}")
p: button(type="submit") Update

このコードでビューを呼び出します-

app.param('name', function (req, res, next, name){
Users.find({ name: name }, function (err, docs) {
    req.user = docs[0];
    next();
});
});
app.get('/users/:name/edit', function (req, res){
res.render("users/edit", { user: req.user });
});

ただし、edit.jade ファイルをレンダリングすると、このエラーがスローされます -

ReferenceError: edit.jade:6
4|      input(type="hidden", name="_method", value="PUT")
5|  p Name:
> 6|        input#name(type="text", name="name", value="#{user.name}")
7|  p Email:
8|      input#email(type="email", name="email", value="#{user.email}")
9|  p Age:

user is not defined
at eval (eval at <anonymous> (/usr/local/lib/node_modules/jade/lib/jade.js:171:8),<anonymous>:32:99)
at /usr/local/lib/node_modules/jade/lib/jade.js:172:35
at /usr/local/lib/node_modules/jade/bin/jade:154:17
at /usr/local/lib/node_modules/jade/node_modules/mkdirp/index.js:38:26
at Object.oncomplete (fs.js:107:15)

これは私には意味がありません。フィールドに正しい値でページをレンダリングしますが、フォームを送信できません。アイデア?

4

1 に答える 1

1

以下を使用して:

app.param('name', function (req, res, next, name){
  //...
});

nameDB から取得したユーザーにパラメーターをマッピングしています。現在、URL からこのパラメーターを抽出しています:

app.get('/users/:name/edit', function (req, res){
  // ...
});

トークンは、:name上記のコードを呼び出して、要求アドレスに保存されるユーザーを取得する必要があることを Express に伝えます。

ただし、テンプレートのフォームは にリクエストを送信し/users/、ユーザーは指定されていません。したがって、フォームの正しい URL を生成します。

form(method="POST", action="/users/#{user.name}/xxx")

または、メソッドが失敗します。

チュートリアルの詳細はわかりませんが、これらのパラメーターを DB に保存する別のリクエスト ハンドラーが必要だと思います。

于 2013-04-20T15:15:18.770 に答える