6

我对 express 框架相当陌生。我在 express API 参考中找不到 application.post() 方法的文档。有人可以提供一些我可以在函数中放入的所有可能参数的示例吗?我已经阅读了以下示例的几个站点,第一个参数是什么意思?

  1. 我知道第二个参数是回调函数,但是我们在第一个参数中到底放了什么?

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

非常感谢您的投入。

4

2 回答 2

7

1.app.get('/', function(req, res){
这是告诉 express 监听请求/并在看到请求时运行该函数。

第一个参数是要匹配的模式。有时像'/'or之类的文字 URL 片段'/privacy',您也可以进行替换,如下所示。如有必要,您还可以按照此处所述匹配正则表达式。

Express 的所有内部部分都遵循该function(req, res, next)模式。传入的请求从中间件链的顶部开始(例如bodyParser)并一直传递,直到有东西发送响应,或者 express 到达链的末端和 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()yield,将请求传递回中间件链。您可以为例如一条包罗万象的路线执行此操作:

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

同样,顺序很重要,如果您希望它在其他路由功能之前运行,则必须将其放在其他路由功能之上。

我之前没有发布过 json,但 @PeterLyon 的解决方案对我来说看起来不错。

于 2013-08-06T19:16:58.393 回答
6

TJ 烦人地在 express 文档中记录了这一点app.VERB(path, [callback...], callback,因此请在 express 文档中搜索。我不会在这里复制/粘贴它们。这是他不友好的说法,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'}]
});
于 2013-08-06T19:05:19.103 回答