Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 链表示法_Javascript_Node.js_Express - Fatal编程技术网

Javascript 链表示法

Javascript 链表示法,javascript,node.js,express,Javascript,Node.js,Express,我有一个带有CRUD方法的Express服务器 我希望当触发post或put或delete时,get方法也会在触发之后运行,以便在我的前端更新视图 这是我的routes.js代码 // ROUTES FOR OUR API // ============================================================================= var express = require("express"); // call express var Nou

我有一个带有CRUD方法的Express服务器

我希望当触发
post
put
delete
时,
get
方法也会在触发之后运行,以便在我的前端更新视图

这是我的routes.js代码

// ROUTES FOR OUR API
// =============================================================================
var express = require("express"); // call express
var NouvProj = require("../app/models/nouvProj");
var mongoose = require("mongoose");

var router = express.Router(); // get an instance of the express Router

router.use(function(req, res, next) {
  next(); // make sure we go to the next routes and don't stop here
});

// test route to make sure everything is working (accessed at GET http://localhost:8080/api)
router
  .route("/projets")

  // create a nouvProj (accessed at POST http://localhost:8080/api/nouvProjs)
  .post(function(req, res, next) {
    var nouvProj = new NouvProj();
    // create a new instance of the nouvProj model

    nouvProj.nomProj = req.body.nomProj;
    nouvProj.leadProj = req.body.leadProj;
    nouvProj.descProj = req.body.descProj;
    nouvProj.BesProj = req.body.BesProj;
    nouvProj.pers = req.body.pers;
    nouvProj.backlog.fonctionnalite = req.body.Fonctionnalite;
    nouvProj.backlog.userStory = req.body.UserStory;
    // save the nouvProj and check for errors
    nouvProj.save(function(err) {
      if (err) {
        res.send(err);
        console.log("err");
      }
      res.json({
        message: "nouvProj created!"
      });
    });
    next();
  })

  .get(function(req, res) {
    NouvProj.find(function(err, nouvProj) {
      if (err) res.send(err);
      else {
        res.json(nouvProj);
        console.log(req.io);
      }
    });
  });
router
  .route("/nouvProjs/:nouvProj_id")

  // get the nouvProj with that id (accessed at GET http://localhost:8080/api/nouvProjs/:nouvProj_id)
  .get(function(req, res) {
    //console.log(req.params.nouvProj_id);
    NouvProj.findById(req.params.nouvProj_id, function(err, nouvProj) {
      if (err) {
        res.send(err);
      } else {
        //console.log(nouvProj);

        res.json(nouvProj);
      }
    });
  })
  .put(function(req, res) {
    NouvProj.findById(req.params.nouvProj_id, function(err, nouvProj) {
      if (err) res.send(err);
      nouvProj.nomProj = req.body.nomProj;
      nouvProj.leadProj = req.body.leadProj;
      nouvProj.descProj = req.body.descProj;
      nouvProj.BesProj = req.body.BesProj;
      nouvProj.pers = [{ name: req.body.name, poste: req.body.poste }];
      nouvProj.backlog.fonctionnalite = req.body.Fonctionnalite;
      nouvProj.backlog.userStory = req.body.UserStory;

      nouvProj.save(function(err) {
        if (err) res.send(err);

        res.json({
          message: "nouvProj updated!"
        });
      });
    });
  })

  .delete(function(req, res) {
    NouvProj.remove(
      {
        _id: req.params.nouvProj_id
      },
      function(err, nouvProj) {
        if (err) res.send(err);

        res.json({
          message: "Successfully deleted"
        });
      }
    );
  });
module.exports = router;
如果没有
next()
中间件,我的应用程序将发布和获取数据。但是当我添加
next()
时:

从代码的这一部分开始:

  res.json({
    message: "nouvProj created!"
  });
});
next();

我如何解决这个问题,并能够在每次添加数据时更新
get
方法?

在调用
next()
之前,不能在中间件函数中调用
res.send()
res.json()
res.render()
等。一旦调用响应,Express将停止执行链

如果要“链接”响应,可以使用类似request()的库来发出多个HTTP调用。以下是默认示例之一:

request
  .get('http://example.com/img.png')
  .on('response', function(response) {
    console.log(response.statusCode) // 200
    console.log(response.headers['content-type']) // 'image/png'
  })
  .pipe(request.put('http://example.com/img.png'))

不能对一个请求发送多个响应,这不是HTTP的工作方式,这就是为什么会出现错误


大多数人在这样的API上使用两种方法。只返回带有POST响应的对象(例如,
res.json({message:'Success!',project:nouvProj});
),或者让客户端在获得成功响应后进行GET查询

您是否试图将数据从一个中间件函数传递到另一个中间件函数?我会创建一个数据流,在每次执行
post
后执行
get
方法。我认为第一种方法更合适,因为不需要另一个请求。@tariklefi这实际上取决于幕后发生的事情。如果持久性可能需要一段时间(例如,处理视频或类似内容),最好只回复您得到了它,或者提供一个指向它最终位置的链接,然后让客户稍后找到它。我不知道您是否理解我想要什么。我将创建一种流,在添加数据时,更新get方法,以便我的前端框架能够侦听更改。
request
  .get('http://example.com/img.png')
  .on('response', function(response) {
    console.log(response.statusCode) // 200
    console.log(response.headers['content-type']) // 'image/png'
  })
  .pipe(request.put('http://example.com/img.png'))