2013-08-06 1 views
5

Я довольно новичок в структуре Express. Я не смог найти документацию для метода application.post() в ссылке express API. Может ли кто-нибудь дать несколько примеров всех возможных параметров, которые я могу внести в функцию? Я прочитал пару сайтов со следующим примером, что означает первый параметр?Express Framework app.post и app.get

  1. Я знаю, что вторым параметром является функция обратного вызова, но что именно мы вставляем в первый параметр?

    app.post('/', function(req, res){ 
    
  2. Кроме того, предположим, что мы хотим, чтобы пользователи могут оставлять (отправить данные на наш сервер) идентификационные номера при определенном формате ([{ID: 134123, URL: www.qwer.com}, {ID: 131211, URL: www.asdf.com}]). Затем мы хотим извлечь идентификаторы и получить данные с этими идентификаторами откуда-то на нашем сервере. Как мы напишем метод app.post, который позволяет нам манипулировать вводом массива объектов, чтобы мы использовали только идентификатор этого объекта (ключ) для извлечения необходимой информации независимо от других ключей в объектах. Учитывая описание задачи, нужно ли использовать метод app.get()? Если да, то как мы будем писать функцию app.get()?

Большое спасибо за ваши материалы.

ответ

6

1. app.get('/', function(req, res){
Это говорит экспресс для прослушивания запросов на / и запустить функцию, когда он видит одну.

Первый аргумент - это шаблон для соответствия. Иногда буквальный фрагмент URL-адреса, например '/' или '/privacy', вы также можете делать замены, как показано ниже. Вы также можете сопоставлять регулярные выражения, если необходимо, как описано here.

Все внутренние части экспресса соответствуют образцу function(req, res, next). Входящий запрос начинается в верхней части цепи промежуточного программного обеспечения (например, bodyParser) и передается до тех пор, пока что-то не отправит ответ, или экспресс не дойдет до конца цепочки и 404.

Вы обычно помещаете свой app.router в нижней части цепочки. Как только Express добирается туда, он начинает сопоставлять запрос со всеми app.get('path'..., app.post('path'... и т. Д. В том порядке, в котором они были настроены.

Подстановка:

// this would match: 
// /questions/18087696/express-framework-app-post-and-app-get 

app.get('/questions/:id/:slug', function(req, res, next){ 
    db.fetch(req.params.id, function(err, question){ 
    console.log('Fetched question: '+req.params.slug'); 
    res.locals.question = question; 
    res.render('question-view'); 
    }); 
}); 

next():
Если вы определили свои функции обработки, как function(req, res, next){} вы можете позвонить next() уступить, передавая запрос обратно в промежуточной цепи. Вы можете сделать это, например.неоднородная маршрут:

app.all('*', function(req, res, next){ 
    if(req.secure !== true) { 
    res.redirect('https://'+req.host+req.originalUrl); 
    } else { 
    next(); 
    }; 
}); 

Опять же, порядок имеет значение, вы должны поставить это выше других функций маршрутизации, если вы хотите, чтобы работать перед теми.

У меня нет POSTed json раньше, но решение PeterLyon для меня отлично выглядит для этого.

6

TJ досадно документирует это как app.VERB(path, [callback...], callback в экспресс-документах, поэтому выполните поиск экспресс-документов для этого. Я не буду копировать/вставлять их здесь. Это его недружелюбный способ сказать, что app.get, app.post, app.put и т. Д. Все они имеют одну и ту же сигнатуру функций, и для каждого поддерживаемого метода из HTTP есть один из этих методов.

Чтобы получить Опубликованные данные в формате JSON, используйте bodyParser промежуточные программное обеспечение:

app.post('/yourPath', express.bodyParser(), function (req, res) { 
    //req.body is your array of objects now: 
    // [{id:134123, url:'www.qwer.com'},{id:131211,url:'www.asdf.com'}] 
}); 
+0

Этот синтаксис является еще одним примером цепи промежуточного программного обеспечения, которую я описал! 'express.bodyParser()' возвращает некоторую функцию с функцией подписи {req, res, next) 'и внутренне вызывает' next() 'после того, как она разобрала json в объект' req.body'. Затем Express передает запрос вниз по цепочке промежуточного программного обеспечения, к THIRD аргументу 'app.post ('/ yourPath', ...)', который является функцией, описанной выше Питером. – Plato

+0

Oi, пытаясь найти 'app.get' в экспресс-документах! Спасибо за комментарий 'app.VERB'. – FriendlyGuy