Обработка ввода формы в nodejs

#javascript #node.js #express

#javascript #node.js #выразить

Вопрос:

Я хотел бы, чтобы пользователь отправлял URL-адрес в качестве ввода формы (например: «http://api.open-notify.org/astros.json«) и считывает содержимое с отправленного URL.

Я не уверен, что мой текущий подход правильный. Что я должен указать в поле URL ниже?

 var options = {
    url: '....',
    method: 'GET',
    headers: {'Content-Type' : 'application/x-www-form-urlencoded' }
}
  

Комментарии:

1. Используете ли вы какие-либо фреймворки node, такие как Express или Koa ?

2. Итак, ваша проблема в том, что вы не знаете, как получить url параметр в express?

3. смотрите экспресс-маршрутизацию expressjs.com/en/guide/routing.html

4. В этом случае, если ваша форма / приложение создает POST , вы должны быть в состоянии подключиться к нему с app.post('/formUrl', () => ...) помощью вашего server.js

Ответ №1:

Вы могли бы сделать что-то вроде этого (я думаю, это то, что вы хотите):

Я предлагаю использовать request-promise package

 const rp = require('request-promise');
// post router
app.post('/readUrl', async (req, res) => {
  const uri = req.body.url // http://api.open-notify.org/astros.json

  const options = {
    uri,
    headers: {
      // maybe set some headers to accept other formats of response
    },
    // Automatically parses the JSON string in the response
    json: true
  };

  const data = await rp(options);
  // data is json
  res.json(data);
})
  

Комментарии:

1. @ naga — elixir — jar спасибо! Можете ли вы поделиться тем, как это можно сделать в nodejs без фреймворка? Вот как я настраиваю сервер узла: codepen.io/sofie97/pen/axoRbx?editors=1010

2. что вы подразумеваете под без фреймворка ? без request-promise пакета?

3. без использования expressjs

4. честно говоря, это слишком много работы. Почему бы не позволить express сделать тяжелую работу? В любом случае, позвольте мне попробовать

Ответ №2:

Похоже, у вас уже загружена логика Express. ИМО, если у вас уже работает express, создайте маршрут публикации, по которому пользователь может перейти:

 app.post("/form",(req,res)=>{
    //See the request body here.
    console.log(req.body)
);
  

Затем вы должны выполнить свой AJAX-вызов с указанным выше URL-адресом. Стоит отметить, что вам понадобится анализатор тела на вашем server.js файл.

 const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
  

Плагин позволяет упростить синтаксический анализ на стороне сервера с клиента.

Комментарии:

1. Могу я спросить, как мне передать переменную формы URL в express? <input type="text" class="form-control" id="url" name="url"/> должен ли я использовать app.post("/url",(req,res)=>{ @Justin Rice

2. Если этот ввод является частью формы, вы можете прикрепить параметры действия и метода к форме. Если у вас есть только входные данные, вы можете сослаться на их значение и отправить значение в качестве атрибута данных в запросе AJAX. Данные будут отображаться в объекте req в express, учитывая, что пути идентичны.