Javascript 链表示法
我有一个带有CRUD方法的Express服务器 我希望当触发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
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'))