#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 Rice2. Если этот ввод является частью формы, вы можете прикрепить параметры действия и метода к форме. Если у вас есть только входные данные, вы можете сослаться на их значение и отправить значение в качестве атрибута данных в запросе AJAX. Данные будут отображаться в объекте req в express, учитывая, что пути идентичны.