Expressjs安全REST应用程序中的路由有什么问题?

时间:2016-09-29 11:10:25

标签: javascript node.js rest express jwt

我在http://thejackalofjavascript.com/architecting-a-restful-node-js-app/.I的帮助下使用eclipse插件nodeclipse创建了node.js应用程序,使用 Postman chrome app来测试RESTful api。当我使用以下3个标题向网址http://localhost:3000/api/v1/products发送帖子请求时

  • 内容类型: application / json

  • 的x访问令牌: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NzU3NDQwOTY2NjJ9.z6WMxiSU11OKVqiRMXK7xfTRlPX_hYfD8vzQvs492iY

  • x-key: arvind@myapp.com

我没有获得所有产品的列表,而是获得:

Error: Not Found
   at C:\Users\mahantas\neonworkspace\myrestapp\server\server.js:37:13
   at Layer.handle [as handle_request] (C:\Users\mahantas\neonworkspace\myrestapp\server\node_modules\express\lib\router\layer.js:95:5)
   at trim_prefix (C:\Users\mahantas\neonworkspace\myrestapp\server\node_modules\express\lib\router\index.js:312:13)
   at C:\Users\mahantas\neonworkspace\myrestapp\server\node_modules\express\lib\router\index.js:280:7
   at Function.process_params (C:\Users\mahantas\neonworkspace\myrestapp\server\node_modules\express\lib\router\index.js:330:12)
   at next (C:\Users\mahantas\neonworkspace\myrestapp\server\node_modules\express\lib\router\index.js:271:10)
   at C:\Users\mahantas\neonworkspace\myrestapp\server\node_modules\express\lib\router\index.js:618:15
   at next (C:\Users\mahantas\neonworkspace\myrestapp\server\node_modules\express\lib\router\index.js:256:14)
   at Function.handle (C:\Users\mahantas\neonworkspace\myrestapp\server\node_modules\express\lib\router\index.js:176:3)
   at router (C:\Users\mahantas\neonworkspace\myrestapp\server\node_modules\express\lib\router\index.js:46:12)

server.js的代码是:

var express = require('express');
var path = require('path');
var logger = require('morgan');
var bodyParser = require('body-parser');

var app = express();

app.use(logger('dev'));
app.use(bodyParser.json());

app.all('/*', function(req, res, next) {
  // CORS headers
  res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  // Set custom headers for CORS
  res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key');
  if (req.method == 'OPTIONS') {
    res.status(200).end();
  } else {
    next();
  }
});

// Auth Middleware - This will check if the token is valid
// Only the requests that start with /api/v1/* will be checked for the token.
// Any URL's that do not follow the below pattern should be avoided unless you 
// are sure that authentication is not needed
app.all('/api/v1/*', [require('./middlewares/validateRequest')]);

app.use('/', require('./routes'));

// If no route is matched by now, it must be a 404
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// Start the server
app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  console.log('Express server listening on port ' + server.address().port);
});

routes / index.js的代码是:

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

var auth = require('./auth.js');
var products = require('./products.js');
var user = require('./users.js');

/*
 * Routes that can be accessed by any one
 */
router.post('/login', auth.login);

/*
 * Routes that can be accessed only by authenticated users
 */
router.get('/api/v1/products', products.getAll);
router.get('/api/v1/product/:id', products.getOne);
router.post('/api/v1/product/', products.create);
router.put('/api/v1/product/:id', products.update);
router.delete('/api/v1/product/:id', products.delete);

/*
 * Routes that can be accessed only by authenticated & authorized users
 */
router.get('/api/v1/admin/users', user.getAll);
router.get('/api/v1/admin/user/:id', user.getOne);
router.post('/api/v1/admin/user/', user.create);
router.put('/api/v1/admin/user/:id', user.update);
router.delete('/api/v1/admin/user/:id', user.delete);

module.exports = router;

0 个答案:

没有答案