как передать пользовательский ввод из HTML-формы при использовании express.Router () - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть файл server.js, который выглядит так:

var express = require('express');
var app = express();
var mongoose = require('mongoose');
var Bear = require('./models/bear');

mongoose.connect('mongodb://123:pass123@ds1383.mlab.com:53/bears');


var bodyParser = require("body-parser");

app.use(bodyParser.urlencoded({extended : false}));
app.use(bodyParser.json());

var port = 8080;


var router = express.Router();



router.use(function(req, res, next){

   //console.log("Working....");
   next();

});


router.get('/', function (req, res){

    res.json({ message: "API Works!"});

});


router.route('/bears')

    .post(function(req, res) {
        console.log("hi");

    var bear = new Bear(req.body);      // create a new instance of the Bear model
    console.log(bear);
    // save the bear and check for errors
    bear.save(function(err) {
        if (err)
            return res.send(err);

        res.json({ message: 'Bear created!' });
    });

});



app.use("/", (req, res) =>{
    res.sendFile(__dirname + "/index.html");
});
app.use('/books', router);

app.listen(port);
console.log("Listening on port "+ port);

И мой файл Index.html выглядит так:

<head> 

</head>
<body>

    <form method="POST" action="/bears">
        Enter Book to add
        <input type="text" id="book_name"/>
        <br /><br />

        Enter Quantity
        <input type="number" id="book_quantity"/>
        <br /><br />

        Enter Price

        <input type="text" id="book_price"/>
        <br /><br />

        <button type="submit"> Add Book </button>


    </form>

</body>

Мне было интересно, почему он не входит в

router.route('/bears')
.post(function(req, res){});

при нажатии кнопки «Добавить книгу» даже подумал, что установил

action="/bears" атрибут.

При тестировании с помощью curl все работает нормально, только не с этой HTML-формой

Я тестирую с помощью curl, вот так:

curl -i -X POST -H "Content-Type: application/json" -d '{ "book_name" : "Android", "book_quantity": 2,"book_price": 580 }' localhost:8080/books

Я новичок в Javascript, поэтому любая помощь будет признательна!

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018
app.use("/", (req, res) =>{
    res.sendFile(__dirname + "/index.html");
});

Используется для всех запросов, а не просто / /1002*app.get () `для обработки страницы index.html. Это должно позволить вашим запросам пройти.

app.get("/", (req, res) =>{
    res.sendFile(__dirname + "/index.html");
});

И конечная точка будет /books/bears, а не просто /bears, поскольку ваш маршрут использует app.use('/books',router), поэтому ваши конечные точки должны начинаться с /books

<form method="POST" action="/books/bears">
0 голосов
/ 10 ноября 2018

Для пост-звонка через HTML-форму обязательны атрибуты «name» для всех входных тегов

<form method="POST" action="/books/bears">
    Enter Book to add
    <input type="text" id="book_name" name="book_name"/>
    <br /><br />

    Enter Quantity
    <input type="number" id="book_quantity" name="book_quantity"/>
    <br /><br />

    Enter Price

    <input type="text" id="book_price" name="book_price"/>
    <br /><br />

    <button type="submit"> Add Book </button>


</form>

Также используйте

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

в коде сервера

Это связано с тем, что форма отправляет данные публикации в формате application / x-www-form-urlencoded, поэтому доступ к серверу осуществляется как req.body.book_name.

если нужен формат json, используйте на клиенте javascript, создайте json и затем отправьте.

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