【问题标题】:Why does save function in express not work?为什么快递中的保存功能不起作用?
【发布时间】:2020-05-05 13:25:26
【问题描述】:

这是我在快递的第一天。我试图创建一个简单的路线,但我的保存功能似乎不起作用。我尝试查看在 stackoverflow 上发布的类似问题,但无法做到。任何帮助将不胜感激。

const express = require("express");
const router = express.Router();
const Post = require("../models/Post");

//ROUTES

router.post('/', (req, res) => {
    const post = new Post({
        title: req.body.title,
        description: req.body.description
    })

    post.save()
    .then(data => {
        res.json(data);
    })
    .catch(err => {
        res.json(err);
    }); 


});

module.exports = router; 

这是我的模型。

const mongoose = require("mongoose");

const PostSchema = mongoose.Schema({
    title: {
        type: String,
        required: true
    },
    description: {
        type: String,
        required: true
    }
});

module.exports = mongoose.model('Posts',PostSchema);

app.js 代码

const express = require("express");
const app = express();
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
require("dotenv/config");


//IMPORT ROUTES
const postsRoute = require("./routes/posts");

//MIDDLEWARE - Function that always execute when routes are being hit.
app.use(bodyParser.json())
app.use('/posts', postsRoute)
//app.use('/users', usersRoute)

//ROUTES
app.get('/', (req, res) => {
    res.send("We are on home");
});

//CONNECT TO DB
mongoose.connect(
process.env.DB_CONNECTION, 
{ useNewUrlParser: true },
() => {
    console.log("DB Connected!!")
})

//How do we start listening to the server
app.listen(3000);

我的邮递员查询 -

邮递员回应 -

如果您需要更多信息,请告诉我。

【问题讨论】:

  • 哪条路线不起作用?如果是帖子,那么您应该创建帖子请求来测试它,如果您在控制台上遇到错误,请将其添加到您的问题中。
  • 请提及您在尝试保存时遇到的错误:)
  • “不工作”是什么意思?你有错误吗?
  • 另外,您是否安装了正确的 Express 中间件,以便在您的 POST 请求处理程序中填充 req.body?您没有在发布的代码中显示它。没有它,req.body 将是空的。
  • @MianMuhammad - 我遇到了问题。我没有在 DB_CONNECTION 字符串中的 Mongo 密码中转义“@”。我将密码更改为不太复杂的密码,它起作用了!非常感谢您的参与。 :)

标签: javascript node.js api express routes


【解决方案1】:

您的app.js 应该是:

const express = require("express");
const app = express();
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
require("dotenv/config");


//MIDDLEWARE - Function that always execute when routes are being hit.
app.use(bodyParser.json())


   mongoose.connect(process.env.DB_CONNECTION, {  useNewUrlParser: true }, function(err) {
    if (err) {
        console.error('System could not connect to mongo server')
        console.log(err)
        process.exit()
    } else {
        console.log('System connected to mongo server')
    }
});


//ROUTES
app.get('/', (req, res) => {
    res.send("We are on home");
});

//IMPORT ROUTES
const postsRoute = require("./routes/posts");

app.use('/posts', postsRoute)


app.listen(3000);

还在路由器中添加控制台登录以检查 req.body :

router.post('/', (req, res) => {
    console.log('req.body===',req.body);
    ...
});

【讨论】:

  • 非常感谢您的帮助。这些日志消息帮助我理解了这个问题。我没有在 DB_CONNECTION 字符串中的密码中转义“@”。非常感谢您的帮助。
猜你喜欢
  • 2019-07-23
  • 2015-10-09
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多