0

我在新路由器上使用 Express 4。至少有一件事让我感到困惑,这是一个语法问题——我想知道是否有一个正则表达式可以做我想做的事。我有一个标准的 REST api,但我想添加批量更新,以便我可以发送所有信息以通过一个请求更新某些用户模型,而不是每个用户一个 PUT 请求。无论如何,我目前将所有请求路由到用户资源,如下所示:

app.use('/users, userRoutes);

在 userRoutes.js 中:

router.get('/', function (req, res, next) {

   //gets all users
});


router.put('/:user_id', function (req, res, next) {

   //updates a single user
});

但现在我想要一个捕获批处理请求的路由,如下所示:

router.put('/Batch', function (req, res, next) {


     //this picks up an array of users from the JSON in req.body and updates all

});

换句话说,我想要的东西可以转化为:

app.use('/usersBatch, function(req,res,next){

  }

...但是使用新路由器。我无法正确使用语法。

我试过这个:

app.use('/users*, userRoutes);

但这不起作用。有谁知道如何设计这个?

4

2 回答 2

0

REST 不包含 POST 作为列表语法。这是因为 REST 中的每个 URL 都指向一个单独的资源。

作为一名互联网工程师,我没有看到任何批量 PUT 或 POST,但也就是说,这是您的应用程序,因此您可以制作任何您喜欢的 API。肯定有它的用例。

您仍然需要将其描述为 Express。我会这样做:

var express = require('express');
var router = express.Router();

router.get('/',            function (req, res) {}); // gets all users
router.post('/:user_id',   function (req, res) {}); // one user
router.put('/:user_id',    function (req, res) {}); // one user
router.patch('/:user_id',  function (req, res) {}); // one user
router.delete('/:user_id', function (req, res) {}); // one user

app.use('/user', router);  // Notice the /user/:user_id is *singular*

var pluralRouter = express.Router();
pluralRouter.post('/', function (req, res) {
   // req.body is an array.  Process this array with a foreach
   // using more or less the same code you used in router.post()
});
pluralRouter.put('/', function (req, res) {
   // req.body is another array.  Have items in the array include
   // their unique ID's.  Process this array with a foreach
   // using +/- the same code in router.put()
});

app.use('/users', pluralRouter);  // Notice the PUT /users/ is *plural*

还有其他方法可以做到这一点。包括在 URL 中放置逗号分隔的参数。例如

GET /user/1,2,3,4

但这并不是那么好用,而且在 PUT 或 POST 中也很模糊。并行数组是邪恶的。

总而言之,这是一个利基用例,所以做最好的。请记住,服务器是为服务客户端而构建的。弄清楚客户的需求和服务。

于 2015-07-03T02:30:02.990 回答
0

我猜该路线[PUT] /users/Batch正在接听电话。[PUT] /users/:user_id该字符串/:user_id用作正则表达式,导致它也收集/Batch

您可以在路线顺序中移动/Batch之前,将正则表达式改进为不捕获或更改为不会过早获取的内容。/:user_id/:user_id/Batch/Batch

(加上迈克尔说的所有东西)

于 2015-07-03T02:34:29.767 回答