2013-08-06 45 views
5

我对表达框架相当陌生。我无法在express API参考中找到application.post()方法的文档。有人可以提供我可以放入函数的所有可能参数的几个例子吗?我用下面的例子阅读了几个网站,第一个参数是什么意思?Express框架app.post和app.get

  1. 我知道第二个参数是回调函数,但是我们究竟把第一个参数放到什么位置?

    app.post('/', function(req, res){ 
    
  2. 而且,假设我们希望用户发布有一定的格式(将数据发送到我们的服务器)的ID号([{ID:134123,网址:www.qwer.com},{ID: 131211,网址:www.asdf.com}])。然后,我们想要提取ID并从服务器中的某个位置获取这些ID的数据。我们如何编写允许我们操作对象数组输入的app.post方法,以便只使用这些对象的ID(键)来检索必要的信息,而不管对象中的其他键。鉴于任务的描述,我们是否必须使用app.get()方法?如果是这样,我们将如何编写app.get()函数?

非常感谢您的意见。

回答

6

1. app.get('/', function(req, res){
这是告诉快递为请求听/和运行功能,当它看到一个。

第一个参数是要匹配的模式。有时候像'/''/privacy'这样的字面的URL片段,你也可以做如下所示的替换。如果需要,您还可以匹配正则表达式here

Express的所有内部零件都遵循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(); 
    }; 
}); 

同样,为了事情,你必须,如果你想它的运行之前把这个高于其它路由功能。

我以前没有发布json,但是@ PeterLyon的解决方案对我来说看起来很好。

6

TJ在快速文档中将此文档记录为app.VERB(path, [callback...], callback,因此请检索express文档。我不打算在这里复制/粘贴它们。这是他不友好的说法,app.getapp.postapp.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()'返回一些带有'function(req,res,next)'函数的函数,一旦将json解析为'req.body'对象,就会内部调用'next()'。 Express然后将请求传递给中间件链,传递给app.post('/ yourPath',...)'这是Peter在上面写的函数的THIRD参数。 – Plato

+0

Oi,试图在express文档中找到'app.get'!感谢“app.VERB”评论。 – FriendlyGuy

相关问题