Не удается получить текстовые данные, опубликованные тегом формы в Express JS - PullRequest
0 голосов
/ 14 июня 2019

Я разрабатываю простой конвейер, который, когда пользователь выделяет текстовый блок на странице Chrome и щелкает расширение, показывает выделенный текст внутри <iframe>, определенный в popup.js расширения Chrome, и отправляет выделенный текст насервер, работающий на Express.js.

Текущий статус - popup.html, в котором работают popup.js, а popup.js записывает highlighted text в document.Пока что это работает хорошо.

Тем не менее, работающий терминал node app.js продолжает показывать undefined всякий раз, когда я нажимаю на chrome extension favicon.Я ожидаю, что выделенный текст будет отображен в журнале терминала.

Какова возможная причина этого неправильного действия?

popup.html

<html>
    <head>
        <meta charset="UTF-8">
        <style>
            body {
                width: 400px;
                height: 500px;
            }
            iframe {
                width: 400px;
                height: 500px;
            }
        </style>
    </head>
    <body>

        <iframe frameborder="1"></iframe> <!--'1' for border on/ '0' for border off-->

        <script type="text/javascript" src="popup.js"></script>

    </body>
</html>

popup.js

chrome.tabs.executeScript( {
    code: "window.getSelection().toString();"
}, function(selection) {

    document.write(selection[0]);

    var text =
        '<form action="http://localhost:8080/example" method="post" id="hlgt_form">' +
        '<input type="hidden" id = "hlgt" name = "hlgt" value= ""> ' +
        '</form>';

    document.write(text);

    document.getElementById('hlgt').value = selection[0];
    // it stores highlights into value of <input>

    document.getElementById('hlgt_form').submit();
});

app.js (выполняется узлом app.js)

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

app.use(express.json());

const port = 8080;

app.listen(port, () => {
    console.log(`Server running on port: ${port}`);
});

app.post('/example', (req, res) => {
    console.log(`${req.body.name.hlgt}`);
});

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Я думаю, что проблема в вашем экспресс-приложении.Похоже, вы не используете промежуточное ПО body-parser для фактического получения данных HTTP POST в вашем запросе, и даже если бы вы это сделали, вы бы ссылались на эту информацию как req.body.hlgt, без .name.

* 1004.* Попробуйте что-то вроде этого:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();

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

const port = 8080;

app.listen(port, () => {
    console.log(`Server running on port: ${port}`);
});

app.post('/example', (req, res) => {
    console.log(`${req.body.hlgt}`);
});
0 голосов
/ 14 июня 2019

Пишите только эти две строки

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

app.use(bodyParser.json({limit:"5MB"}));
...