发布请求仅使用Mongoose和Express保存versionKey

时间:2016-10-18 19:43:04

标签: node.js mongodb express mongoose

我正在尝试将一个数字和一些字符串值保存到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

1 个答案:

答案 0 :(得分:1)

第一个问题,编码必须与您的Express解析相匹配(在这种情况下,它不是multipart/form-data而是application/json'application/vnd.api+json'application/x-www-form-urlencoded。删除您指定修复的编码类型。

其次,响应将是一个简单的JSON对象:

{
    "message": "Post saved"
}