req.body и req.file пусты - PullRequest
       24

req.body и req.file пусты

0 голосов
/ 03 августа 2020

Newb ie здесь. Я пытаюсь сделать блог basi c markdown. req.body не имеет моего поля уценки, а req.file не определено при попытке загрузить статью. Я не знаю, проблема в том, как я настроил синтаксический анализатор тела или multer или просто в том, как выполняется мой POST-запрос.

статьи. js

const express = require("express");
const Article = require("./../../models/article")
const markdownConvert = require("./../../bin/markdown-converter")
const multer = require("multer");

const storage = multer.diskStorage( {
    destination: "./assets/images",
    filename: (req,file,cb) => {
        cb(null,new Date()+"__"+file.originalname);
    } 
    
})

const upload = multer({storage:storage}).single("blogImage");

const router = express.Router();

router.get("/new",(req,res)=> {
    let article = new Article({
        title: "",
        markdown: []
    });

    res.render("new-post",{article:article,markdownConvert: markdownConvert});
})

router.get("/:id",async (req,res)=> {
    const article = await Article.findById(req.params.id);
    console.log(article);
    
    res.render("article",{article : article, markdownConvert : markdownConvert})
})

router.post("/", async (req,res) => {
    upload(req, res, (err) => {
        if(err) {
            console.log(err);
        } else {
            console.log(req.file);
            res.send("test");
        }
    })
    let article = new Article({
        title: req.body.title,
        date: new Date(),
        markdown: markdownConvert.convertMarkdown(req.body.markdown), //Process text into JSON object
        imgURL: `./assets/images/${req.filename}`
    })
    
    try {
        article = await article.save();
        res.redirect(`/articles/${article._id}`)
    } catch (error) {
        console.log(error);
        console.log(article);
        res.render("new-post", {article: article, markdownConvert: markdownConvert});
    }
})

module.exports = router;

сервер. js

const express = require("express");
const app = express();
const port = 5000;
const mongoose = require("mongoose");
const articleRouter = require("./routers/articles/articles");
const bodyParser = require("body-parser");
const Article = require("./models/article");

mongoose.connect("mongodb://localhost/blog",{useNewUrlParser: true, useUnifiedTopology:true});

mongoose.connection.once("open", () => {
    console.log("Connected to database");
}).on("error",(error)=> {
    console.log(error);
})

app.set("view engine","ejs");
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

app.use("/assets",express.static("assets"));

app.get("/", async (req,res) => {
    const articles = await Article.find().sort( {date: "desc"});
    console.log(articles[0].markdown);
    res.render("index",{articles: articles});
})

app.listen(port);
console.log(`listening on ${port}`)
app.use("/articles",articleRouter);

форма

<div class="back">
    <form action="/articles" method="POST" enctype="multipart/form-data">
        <div>
            <input required value = "<%= article.title %>" class="title input-title" name="title" id="title" type="text">
        </div>
        <div>
            <textarea required value = "<%= markdownConvert.toStringMarkdown(article.markdown) %>" id="markdown" class="input-blog blog-content content" name="markdown" cols="30" rows="10"></textarea>
        </div>
        <input type="file" name="blogImage">
        <div class="btn-container">
            <button type="submit" class="submit-btn">Submit</button>
        </div>
    </form>
</div>

Кто-нибудь может указать на мою ошибку?

1 Ответ

0 голосов
/ 03 августа 2020

Перепишите следующим образом. Это может решить проблему

router.post("/", upload, async (req,res) => {
let article = new Article({
    title: req.body.title,
    date: new Date(),
    markdown: markdownConvert.convertMarkdown(req.body.markdown), //Process text into JSON object
    imgURL: `./assets/images/${req.filename}`
})

try {
    article = await article.save();
    res.redirect(`/articles/${article._id}`)
} catch (error) {
    console.log(error);
    console.log(article);
    res.render("new-post", {article: article, markdownConvert: markdownConvert});
}
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...