我正在尝试将一个数字和一些字符串值保存到MongoDB中,即使代码对我来说很有意义,也没有返回错误并在数据库中创建一个条目,我得到的只是一个版本密钥,类似于这样:
{
"_id": {
"$oid": "58052711f319bc041c5ebdac"
},
"__v": 0
}
我想我会先尝试保存号码和标题,看看他们是否得到了保存,但他们没有,正如您在上面所看到的那样。 我找到的每个RESTful API和Express“post”请求教程和答案似乎都有不同的做法!
另外,它应该以明文形式显示res.json,以便我以某种方式进行格式化或渲染,还是应该显示属性message:
的值?
这是代码
// modules =======================================================
const express = require('express')
const app = express()
const mongoose = require('mongoose')
// configuration =================================================
const db = require('./config/db')
// mongoose ======================================================
mongoose.connect(db.url)
const PostSchema = new mongoose.Schema({
number:Number,
title:String,
body:String,
images:String
}, { collection: 'posts' })
const posts = mongoose.model('Post', PostSchema)
// routes ========================================================
app.post('/api/post', function(req, res) {
var post = new posts()
post.number = req.body.number
post.title = req.body.title
post.save(function(err) {
if (err) res.send(err)
res.json({ message: 'Post saved'})
})
})
这是我的HTML5表单
<form action="/api/post" enctype="multipart/form-data" method="post">
<label for="number">Post Number:</label>
<input type="number" name="number" size="2" placeholder="required" required /><br />
<label for="title">Title:</label>
<input type="text" name="title" placeholder="optional" /><br />
<label for="body">Text:</label><br />
<textarea name="body" cols="80" rows="20" placeholder="optional"></textarea><br />
<label for="images">Images:</label>
<input type="text" name="images" placeholder="optional" />
<span class="form-hint">Comma separated file names, e.g. image1.jpg,image2.jpg,image3.png</span><br />
<input type="submit" value="Submit" />
</form>
我的中间件位于server.js中的路由之前
// middleware ====================================================
app.use(bodyParser.json()) // parse application/json
app.use(bodyParser.json({ type: 'application/vnd.api+json' })) // parse application/vnd.api+json as json
app.use(bodyParser.urlencoded({ extended: true })) // parse application/x-www-form-urlencoded
app.use(methodOverride('X-HTTP-Method-Override')) // override with the X-HTTP-Method-Override header in the request
app.use(express.static(__dirname + '/public')) // set static files location
答案 0 :(得分:1)
第一个问题,编码必须与您的Express解析相匹配(在这种情况下,它不是multipart/form-data
而是application/json
,'application/vnd.api+json'
和application/x-www-form-urlencoded
。删除您指定修复的编码类型。
其次,响应将是一个简单的JSON对象:
{
"message": "Post saved"
}