我正在尝试使用Express将信息发布到mongoDB。所有与DB的连接都正常,因为获取请求工作
在我的server.js中,我定义了Schema
var todoSchema = new Schema({
taskName: String,
createdAt: Date,
isDone: Boolean,
prioraty: String
}, {
collection: 'tasks'
});
var Model = mongoose.model('Model', todoSchema);
然后app.post请求
app.post('/tasks', function(req, res) {
var savedata = new Model({
'taskName': req,
'isDone': false,
'createdAt': Date.now(),
'prioraty': 'medium'
}).save(function (err, result) {
if (err) throw err;
if (result) {
res.json(result)
}
})
});
这根本不起作用......
在我的前端,我按下按钮调用它,但没有任何反应..
postTask(task) {
return this.http.post('http://localhost:3000/tasks', task);
}
我该如何解决?如上所述,GET请求正常,所以我希望我正确的方式......
所以这里得到Request for example
app.get('/tasks', (req, res) => {
Model.find({
// 'request': query
}, function(err, result) {
if (err) throw err;
if (result) {
res.json(result)
} else {
res.send(JSON.stringify({
error : 'Error'
}))
}
})
});
答案 0 :(得分:2)
查看您的POST
,taskName
是一个基于您的架构的字符串,但您传递的是完整的req
对象。它应该是req.body
中的属性req.body.taskName
,如果这是您在请求中传递的内容。
答案 1 :(得分:1)
首先,您需要在前端收到您的回复
在服务中:
postTask(task) {
return this.http.post('http://localhost:3000/tasks', task);
}
如果您使用angularjs
(角度1 +)
您需要使用then
和catch
来接收response
在控制器中:
this.service.postTask(task).then(function(response) {
console.log(response)
}).catch(function(error) {
console.log(error)
})
如果您使用angular
(角度2 +)
您需要subscribe
使用this.http
返回observable
在组件中
this.service.postTask(task).subscribe( response => {
console.log(response)
})
其次,正如@andrew所说,
taskName
您应发送string
,因为taskName
架构为string
var todoSchema = new Schema({
taskName: String,
})
<强>更新强>
req.body包含请求中提交的键值对数据 身体。默认情况下,它是未定义的,并在您使用时填充 身体解析中间件,如body-parser
以下示例说明如何使用body-parsing middleware
填充req.body
。
var app = require('express')();
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.post('/tasks', function(req, res) {
console.log(req.body)
});