如何设置与主文件分开的快速路线?
How to setup express routes separate from main file?
我想按照下面的文件结构将我的 rputes 与主要文件分开 app.js
我已经尝试 api/user/
post api returns 404,任何想法如何使用以下文件结构解决此问题?
./app.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var db = require('./config/db');
var port = process.env.PORT || 8080;
app.use(require('./app/routes'));
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(methodOverride('X-HTTP-Method-Override'));
app.use(express.static(__dirname + '/public'));
function startServer() {
server.listen(port, function() {
console.log('Express server listening on %d, in %s mode', port, app.get('env'));
});
}
setImmediate(startServer);
// expose app
exports = module.exports = app;
./app/routes.js
module.exports = function(app) {
app.use('/api/user', require('./api/user'));
app.route('*')
.get(function(req, res) {
// res.sendFile('./public/views/index.html');
res.sendfile('./public/views/index.html');
});
};
./app/api/user/index.js
var express = require('express');
var controller = require('./user.controller');
var router = express.Router();
router.get('/', controller.index);
router.post('/',controller.create);
module.exports = router;
错误
angular.js: 12410 POST http: //localhost:8080/api/user 404 (Not Found)
(anonymous) @ angular.js: 12410
p @ angular.js: 12155(anonymous) @ angular.js: 11908(anonymous) @ angular.js: 16648
$eval @ angular.js: 17972
$digest @ angular.js: 17786
$apply @ angular.js: 18080(anonymous) @ angular.js: 26749
cg @ angular.js: 3613
d @ angular.js: 3601
angular.js: 14328 Possibly unhandled rejection: {
"data": "Cannot POST /api/user\n",
"status": 404,
"config": {
"method": "POST",
"transformRequest": [null],
"transformResponse": [null],
"jsonpCallbackParam": "callback",
"url": "/api/user",
"data": {
"firstName": "John",
"lastName": "Zhang"
},
"headers": {
"Accept": "application/json, text/plain, */*",
"Content-Type": "application/json;charset=utf-8"
}
},
"statusText": "Not Found"
}
顺便说一句,你在index.js
中定义了路由并在routes.js
中安装了它,它将为/api/user
提供404
,因为当它搜索/
在 index.js
中,它只找到 /api/users
可以被 /api/user/api/users
.
访问的
您可以尝试将 user
路由器挂载到 /api/user
并可以在 index.js
中定义 /
路由
./app/api/user/index.js
var express = require('express');
var controller = require('./user.controller');
var router = express.Router();
//GET /api/user
router.get('/', controller.index);
//POST /api/user
router.post('/',controller.create);
module.exports = router;
./app/routes.js
module.exports = function(app) {
//ANY /api/*
app.use('/api/user', require('./api/user'));
app.route('*')
.get(function(req, res) {
// res.sendFile('./public/views/index.html');
res.sendfile('./public/views/index.html');
});
};
希望对你有帮助。
更新
您的代码中还有其他问题。在你的 app.js 中,你定义了 app.use(require('./app/routes'));
而 routes.js
是 function(app)
.
将该行更改为
require('./app/routes')(app);
并在 app.use(express.static(__dirname + '/public'));
之后添加该行
你的问题与你的requires/imports有关。首先尝试在你的app.js文件
中使用正常路径访问
我想按照下面的文件结构将我的 rputes 与主要文件分开 app.js
我已经尝试 api/user/
post api returns 404,任何想法如何使用以下文件结构解决此问题?
./app.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var db = require('./config/db');
var port = process.env.PORT || 8080;
app.use(require('./app/routes'));
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(methodOverride('X-HTTP-Method-Override'));
app.use(express.static(__dirname + '/public'));
function startServer() {
server.listen(port, function() {
console.log('Express server listening on %d, in %s mode', port, app.get('env'));
});
}
setImmediate(startServer);
// expose app
exports = module.exports = app;
./app/routes.js
module.exports = function(app) {
app.use('/api/user', require('./api/user'));
app.route('*')
.get(function(req, res) {
// res.sendFile('./public/views/index.html');
res.sendfile('./public/views/index.html');
});
};
./app/api/user/index.js
var express = require('express');
var controller = require('./user.controller');
var router = express.Router();
router.get('/', controller.index);
router.post('/',controller.create);
module.exports = router;
错误
angular.js: 12410 POST http: //localhost:8080/api/user 404 (Not Found)
(anonymous) @ angular.js: 12410
p @ angular.js: 12155(anonymous) @ angular.js: 11908(anonymous) @ angular.js: 16648
$eval @ angular.js: 17972
$digest @ angular.js: 17786
$apply @ angular.js: 18080(anonymous) @ angular.js: 26749
cg @ angular.js: 3613
d @ angular.js: 3601
angular.js: 14328 Possibly unhandled rejection: {
"data": "Cannot POST /api/user\n",
"status": 404,
"config": {
"method": "POST",
"transformRequest": [null],
"transformResponse": [null],
"jsonpCallbackParam": "callback",
"url": "/api/user",
"data": {
"firstName": "John",
"lastName": "Zhang"
},
"headers": {
"Accept": "application/json, text/plain, */*",
"Content-Type": "application/json;charset=utf-8"
}
},
"statusText": "Not Found"
}
顺便说一句,你在index.js
中定义了路由并在routes.js
中安装了它,它将为/api/user
提供404
,因为当它搜索/
在 index.js
中,它只找到 /api/users
可以被 /api/user/api/users
.
您可以尝试将 user
路由器挂载到 /api/user
并可以在 index.js
/
路由
./app/api/user/index.js
var express = require('express');
var controller = require('./user.controller');
var router = express.Router();
//GET /api/user
router.get('/', controller.index);
//POST /api/user
router.post('/',controller.create);
module.exports = router;
./app/routes.js
module.exports = function(app) {
//ANY /api/*
app.use('/api/user', require('./api/user'));
app.route('*')
.get(function(req, res) {
// res.sendFile('./public/views/index.html');
res.sendfile('./public/views/index.html');
});
};
希望对你有帮助。
更新
您的代码中还有其他问题。在你的 app.js 中,你定义了 app.use(require('./app/routes'));
而 routes.js
是 function(app)
.
将该行更改为
require('./app/routes')(app);
并在 app.use(express.static(__dirname + '/public'));
你的问题与你的requires/imports有关。首先尝试在你的app.js文件
中使用正常路径访问