javascript - 如何设置与主文件分开的快速路线?

标签 javascript node.js express middleware

我想按照下面的文件结构将我的 rputes 与主要 app.js 分开我已经尝试过返回 404 的 api/user/post api ,知道怎么能我使用以下文件结构解决了这个问题?

./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 , 它会给出 404对于 /api/user , 因为当它搜索 /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.jsfunction(app) .

将该行更改为

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

并在 app.use(express.static(__dirname + '/public')); 之后添加该行

关于javascript - 如何设置与主文件分开的快速路线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41710275/

相关文章:

Javascript 如何将单独的字符连接成数组中的一个字符串?

node.js - 为什么node express中的req.session中会有cookie?

node.js - nodejs中带有回调的用户定义函数

javascript - 在 Nodejs 中将值从 View 传递到没有 URL 的 Node

javascript - Java中的可选参数

Javascript/Angular : clear image select form input

node.js - 运行一个nodejs Web服务器,并显示其主页

node.js - 如何限制 MongoDB 中每分钟的用户操作?

javascript - 这个接受 Express 中的 RequestHandler 的函数是如何工作的?

javascript - 是否有针对 CSS 的 LESS 的 JavaScript 实现?