【问题标题】:Express Framework app.post and app.getExpress 框架 app.post 和 app.get
【发布时间】:2013-08-06 18:23:47
【问题描述】:

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

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

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

非常感谢您的意见。

【问题讨论】:

    标签: node.js syntax parameters express url-parameters


    【解决方案1】:

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

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

    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() 来生成,将请求传递回中间件链。您可能会这样做,例如包罗万象的路线:

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

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

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

    【讨论】:

      【解决方案2】:

      TJ 在 express 文档中将其记录为 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'}]
      });
      

      【讨论】:

      • 这个语法是我描述的中间件链的另一个例子! express.bodyParser() 返回一些带有签名function(req, res, next) 的函数,并在将json 解析为req.body 对象后在内部调用next()。 Express 然后将请求沿着中间件链传递到app.post('/yourPath', ...) 的第三个参数,这是彼得在上面编写的函数。
      • 喂,想在快递文档中找到app.get!感谢app.VERB 的评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2022-12-11
      相关资源
      最近更新 更多