Как получить входные данные из формы в node,js - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть форма в моем приложении node.js, и я хочу взять данные из полей ввода и отправить их через POST. Конечная точка post работает, я протестировал ее с Postman, но когда я заполняю форму, она просто отправляет пустой объект в базу данных без информации о поле формы, как я могу этого добиться? Вот моя e js форма:

<h1>Create a new post!</h1>
<form action="/post" method="POST">
    <div>
        <label for="title">Title</label>
        <input type="text" id="title" name="title" required>
    </div>
    <div>
        <label for="content">Post Content</label>
        <input type="text" id="content" name="content" required>
    </div>
    <div>
        <label for="categories">Categories</label>
        <input type="categories" id="categories" name="categories" required>
    </div>
    <div>
        <label for="date">Date</label>
        <input type="text" id="date" name="date" required>
    </div>
    <div>
        <label for="picture">Picture</label>
        <input type="text" id="picture" name="picture" required>
    </div>
    <button type="submit">Create Post!</button>
</form>

и мой сервер. js:

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const cors = require('cors');

const mongoose = require('mongoose');
require('dotenv').config();
const BASE_URL = process.env.BASE_URL;
const PORT = process.env.PORT || 1337;
// let Post = require('./models/post.model.js');

app.use(cors());

app.use(bodyParser.json());

mongoose.connect(BASE_URL, { useNewUrlParser: true, useUnifiedTopology: true })

const connection = mongoose.connection;

connection.once('open', function () {
    console.log('Connection to MongoDB established succesfully!');
});

app.set('view-engine', 'ejs');

app.get('/', async (req, res) => {
    res.render('index.ejs');
});

app.get('/', async (req, res) => {
    res.render('login.ejs');
});

app.get('/post', async (req, res) => {
    res.render('post.ejs');
});

app.post('/post', async (req, res) => {
    let collection = connection.collection("posts_with_tags_test");
    res.setHeader('Content-Type', 'application/json');
    // let post = new Post(req.body);
    let post = {
        title: req.body.title,
        postContent: req.body.content,
        categories: req.body.categories,
        date: req.body.date,
        picture: req.body.picture
    }
    collection.insertOne(post)
        .then(post => {
            res.status(200).json({ post })
            console.log(post.title)
        })
        .catch(err => {
            res.status(400).send('failed')
        });
})

app.listen(PORT);

, а вот моя схема:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

let Post = new Schema({
    title: {
        type: String
    },
    postContent: {
        type: String
    },
    categories: {
        type: Array
    },
    date: {
        type: String
    },
    picture: {
        type: String
    }
});

module.exports = mongoose.model('Post', Post);

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Вы создали свою схему сообщений goose? Если да, не могли бы вы опубликовать это здесь. Вы используете схему mon goose для создания новой модели, как показано в примере ниже:

    app.post("/person", async (request, response) => {
        try {
            var person = new PersonModel(request.body);
            var result = await person.save();
            response.send(result);
        } catch (error) {
            response.status(500).send(error);
        }
    });

Если ваш сервер узлов запускается, и вы можете отправлять сообщения в mon go Слой mongoose / DAL может быть причиной проблемы.

Здесь я думаю, что вместо этого вы можете использовать модель mon goose, похоже, что вы закомментировали: // let post = new Post(req.body);

    let post = {
        title: req.body.title,
        postContent: req.body.content,
        categories: req.body.categories,
        date: req.body.date,
        picture: req.body.picture
    }
1 голос
/ 30 апреля 2020

Измените это:

app.use(bodyParser.json());

на это:

app.use(bodyParser.urlencoded({ extended: true}))

HTML формы не отправляют JSON данные в виде запроса на отправку, вместо этого отправляет приложение / x- www-form-urlencoded данные, которые должны быть декодированы анализатором тела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...