Как отправить данные формы на сервер express? - PullRequest
0 голосов
/ 14 января 2020

Я настроил базовый c express сервер для приема некоторой информации, отправленной через форму. К сожалению, я столкнулся с некоторыми проблемами. Я не могу записать полученные данные на консоль. Может кто-нибудь помочь мне разобраться?

приложение. js:

const express = require('express');
const path = require('path');

const app = express();
const port = 3000;

app.use(express.urlencoded({extended: false}));
app.use(express.static(path.join(__dirname,'public')));

app.use('/',(req,res,next) => {
  res.sendFile(path.join(__dirname,'public','index.html'));
});

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

app.listen(port, () => console.log(`App is listening on port ${port}!`))

А вот и сама форма: index. html:

   <body>
      <h1>Hello there!</h1>
      <form id='form' method="POST" action="/api">
         <input id='textField' type='text' name='name' placeholder='Enter your name'>
         <p>Enter your date of birth:</p>
         <div class='dob'>
            <input id='date' type='number' name='date' placeholder='Date'>
            <select id='dobMonth' name="month">
               <option value="default">Month</option>
               <option value="Jan">January</option>
               <option value="Feb">February</option>
               <option value="Mar">March</option>
               <option value="April">April</option>
               <option value="May">May</option>
               <option value="June">June</option>
               <option value="July">July</option>
               <option value="Aug">August</option>
               <option value="Sept">Septmeber</option>
               <option value="Oct">October</option>
               <option value="Nov">November</option>
               <option value="Dec">December</option>
            </select>
            <input id='year' type='number' name='year' placeholder='Year'>
         </div>
         <input id='btn' type='submit'>
      </form>
      <script src='script.js'></script>
   </body>

Заранее спасибо:)

Ответы [ 2 ]

1 голос
/ 15 января 2020

Проблема только в порядке ваших маршрутов. Первый указанный вами путь:

app.use('/',(req,res,next) => {
  res.sendFile(path.join(__dirname,'public','index.html'));
});

действует как универсальный, так как каждый путь на сервере включает в себя '/'

Если вы измените порядок и сделаете универсальный наконец, это должно работать для вас нормально.

app.get('/api', (req, res) => {
  console.log(req);
})

app.use('/',(req,res,next) => {
  res.sendFile(path.join(__dirname,'public','index.html'));
});
0 голосов
/ 14 января 2020

Я думаю, для этого вам нужно body-parser middleware и tnen, вы можете получить проанализированные данные из запроса:

вот простой пример:

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

// create application/json parser
var jsonParser = bodyParser.json()

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
  res.send('welcome, ' + req.body.username)
})

// POST /api/users gets JSON bodies
app.post('/api/users', jsonParser, function (req, res) {
  // create user in req.body
})

Но это не обрабатывает многочастные тела (сообщение с файлами). Из-за их сложного и типично большого характера. Для составных кузовов вас могут заинтересовать следующие модули:

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