我在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;