Mongoose $ HTML表单不能正常工作
问题描述:
任何人都可以告诉我我做错了什么。
我的HTML表单:
<form action="/user/:id" method="put">
<div class="form-group">
<label>Miles</label>
<input type="text" class="form-control" name="miles">
</div>
<button type="submit" class="btn btn-warning btn-lg">Login</button>
</form>
我快线:从我的HTML表单
app.put('/user/:id', function(req, res) {
User.findById(req.body.params.id, function(err, user) {
if (err)
res.send(err);
console.log(user.id);
User.findByIdAndUpdate(
user.id,
{$push: {"milesLog": {miles: req.body.miles}}},
{safe: true, upsert: true},
function(err, model) {
console.log(err);
},
res.json(user)
);
发帖我收到以下错误:
Cannot GET /user?miles=66&activity=asdasd
但是当我通过P来测试它OSTMAN它的工作原理:
我在做什么错。为什么它不能从我的HTML表单中工作?
答
路由不匹配,你有这样的URL
/user?miles=66&activity=asdasd
,然后这条路
app.put('/user/:id', ....
这条路正在寻找这样的事情
/user/66
它不寻找querystrings,那将是
app.put('/user', function(req, res) {
var miles = req.query.miles;
var activity = req.query.activity;
除非您有充分的理由使用PUT
请求,否则应该改为使用GET
。
另外,<form action="/user/:id" ...
不是一个有效的URL,你不能在URL中有冒号,而且你似乎有点误解,你的路由中的:id
匹配任何东西,只要它是有效的路由,那么它将匹配
/user/frank
/user/77
/user/something?querystring
等等,然后你可以访问路线
app.get('/user/:id', function(req, res) {
var user = req.params.id; // returns "frank" etc
答
没有“PUT”动词在HTML表单,而你是这样实现它里面:
<form action="/user/:id" method="put">
您在HTML表单使用method="POST"
和改变你的路线:
app.post('/user/:id')
这不是一件坏事使用这种方法。
但是,如果您正在开发一个前端应用程序,通常使用具有“PUT”动词的XMLHttpRequest对象,并且您的路线将工作得很好。
谢谢你的回复。基本上我有一个mongoDB模式中的对象数组。我希望能够通过提交表单将对象推入数组中。这就是为什么我使用PUT。继承人一点点背景http://*.com/questions/28811905/how-to-put-an-object-in-an-array-in-mongodb-using-mongoose-on-form-submission你的帮助是非常赞赏。再次感谢你。 – Skywalker 2015-03-02 18:28:34
@ user2190986 - 我认为大多数浏览器在技术上都会让你做一个PUT请求,但它是无效的,表单唯一有效的方法是GET或POST,这就是你应该使用的,没有理由使用PUT请求这里。另外,正如答案中指出的那样,路由似乎是错误的,并且与您使用的URL不匹配。 – adeneo 2015-03-02 18:50:35