使用Express 4.0和DELETE时不传递body参数

时间:2014-09-22 20:12:31

标签: node.js express

自从升级到Express 4.0(从3.0开始)以来,我的所有DELETE REST调用都没有进行身份验证,因为我注意到body params(存储access_token的地方)不能用于DELETE调用。

每当我使用GET / PUT /等时,这些参数都会完美无缺地通过。

如果有人知道为什么它不能用于DELETE通话,请告诉我。

THX, ORI

更新:

所以我想通了,因为我正在使用邮递员,删除是作为multipart提交的,因此,我需要添加一个特殊的“添加”,所以我添加了multer(app.use(multer());)但是,它仍然不起作用,这是我的代码:

var express = require('express'),

    morgan         = require('morgan'),
    bodyParser     = require('body-parser'),
    methodOverride = require('method-override'),
    //session = require('express-session'),
    multer  = require('multer'),
    mongoose = require('mongoose'),
    passport = require('passport'),


    // Create Application
    app = express();

// configurate the app
app.use(require('stylus').middleware(path.join(__dirname, 'web')));
app.use(express.static(__dirname + '/web'));

app.use(morgan('dev'));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(multer());
app.use(methodOverride());

我的删除功能如下:

app.delete('/api/company/:id/email',auth.clientAuth(), auth.bearerAuth({scope:[1]}), company.deleteEmail);

“auth.clientAuth()”和“auth.bearerAuth({scope:[1]})”处理授权和权利。

同时,如何在快递4.0的新链接中拥有auth和权利的这个“链”?

1 个答案:

答案 0 :(得分:0)

由于您没有显示您的代码,我相信您不会将param作为对象传递。这是一个删除示例,适用于express 4

var bodyParser      = require('body-parser');
var app             = express();

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

var router          = express.Router();

router.route('/users/:user_id')
  .delete(function(req,res){
    User.remove({_id: req.params.user_id},function(err, user){
      if(err) res.json({message: err}) 

      res.json({message: 'User removed from DB!'});
    });
  });