Как передать строку из формы html через маршрутизатор, чтобы сгенерировать и сохранить объект? - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь передать строку из внешнего интерфейса в бэкэнд, но я наткнулся на контрольно-пропускной пункт.Я использую Node, Express, Body Parser, EJS и PostgreSQL.Моя базовая файловая система такова:

– app
   |– api
   |   |– thing.js
   |
   |– index.js

– views
   |– pages
       |– index.ejs

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

index.ejs

<form action="/creatething" method="post">
       <h1>Make a thing</h1>
       <p> What is your thing called?
       <input name="wtitle" type="text">
       </p>
       <p> What is your name?
       <input name="cuser" type="text">
       </p>

       <input type="submit"  value="Submit"> 
</form>

Приведенный выше код запускает / creatething, который помещается в index.js

index.js

    const express = require ('express');
    const thingRouter = require('./api/thing');
    const bodyParser = require("body-parser");
    const app = express();

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

    app.use(bodyParser.urlencoded({extended: false}));
    app.use('/thing', thingRouter);
    app.get('/', function (req, res){
        res.render('pages/index');
    });


    app.post('/creatething',(req,res)=>{
        console.log('clicked '+ req.body);
    });
    module.exports= app;

С этим я могу создать в консоли сообщение, которое печатаетпользовательский ввод из формы.Однако я пытаюсь отправить эти данные в базу данных с помощью кода в thing.js:

thing.js

const {Router} = require('express');
const router = new Router();

router.get('/',(req,res)=> {
    console.log(req.body);
    // Placeholder for working code that stores thing in database :)
});

module.exports = router;

Проблема в том, что я не знаю, как передатьданные req.body из файла index.js в метод thing.js, который вставляет данные в базу данных.Я мог бы просто добавить код базы данных в файл index.js, но я пытался держать вещи более разделенными и узнавать о маршрутизации / монтировании.Чего мне не хватает в этот момент?

1 Ответ

0 голосов
/ 26 февраля 2019

Вы должны изменить несколько вещей в вашем файле thing.js.Требуется всего несколько строк кода вместо импорта Router из экспресса и добавления дополнительных маршрутов.

Просто скопируйте приведенный ниже код и вставьте его в соответствующие файлы.

thing.js

const get = (req, res) => {
    console.log(req.body);
}

module.exports = get;

index.js

const express = require ('express');
const get = require('./api/things');
const bodyParser = require("body-parser");
const app = express();

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

app.use(bodyParser.urlencoded({extended: false}));
app.get('/', function (req, res){
    res.render('pages/index');
});


app.post('/creatething', (req,res)=>{
    get(req,res);
});
app.listen(4000, () => {
    console.log('App is running on port: 4000');
});
module.exports= app;

Надеюсь, это поможетВы решаете проблему.

...