【问题标题】:Node/Express.js request handling with different files使用不同文件处理 Node/Express.js 请求
【发布时间】:2013-12-12 12:13:46
【问题描述】:

//server.js

app.use('/shelf', require('./books').middleware);

//books.js

var app = new express.Router();

app.post('/books' , function (req, res) {
console.log('here');
});

module.exports = app;

这是我到目前为止所做的;我的服务器在 server.js 下运行,当我发出“/shelf/books”请求时,它首先转到 server.js,然后转到 books.js 文件并记录“此处”。但我想添加一个请求处理程序(一个不同的文件,handler.js 即),我想在其中验证 post 参数是否为数字,如果是,则将其重定向到 books.js。

【问题讨论】:

    标签: node.js express middleware


    【解决方案1】:

    app.js

    var express = require('express')
      , http = require('http')
    
    var app = express();
    
    app.set('port', process.env.PORT || 3000);
    app.set('view engine', 'jade');
    app.use(express.favicon());
    
    app.use(require('./handler').middleware);
    
    http.createServer(app).listen(app.get('port'), function(){
      console.log('Express server listening on port ' + app.get('port'));
    });
    

    handler.js

    var express = require('express')
    var books = require('./books')
    
    var router = new express.Router();
    
    router.get('/shelf/:book_id', function(req, res){
      var onlyNumbers =req.param('book_id').match(/^\d+$/)
      if (onlyNumbers){
        var parsedNumber = parseInt(req.param('book_id'));
        if( parsedNumber ) {
          books(parsedNumber)
          console.log("Parsed number is : " + parsedNumber)
          res.end("Parsed number is : " + parsedNumber) 
        }
      }
      else {
          console.log("not a number : " + req.param('book_id')) 
          res.end("not a number : " + req.param('book_id'))
        }
    
      res.end('');
    })
    
    module.exports = router;
    

    books.js

    var express = require('express')
    
    var app = new express.Router();
    
    
    module.exports = function(req, res) {
      console.log("\t in books module")
    };
    

    【讨论】:

    • 而不是 handler.js 中的 router.get,我怎样才能将它应用到函数中。我想在 handler.js 中有一个函数,并在验证到书籍后传递参数,所以我可以在那里发帖。
    【解决方案2】:

    这个怎么样?

    //handler.js

    module.exports = function (req, res, next) {
        req.check_result = /\d+/.test(req.body.yourfield); 
    };
    

    // book.js

    app.post('/books' , function (req, res) {
        if(req.check_result) {
            // your code
        } else {
            // your code
        }
    });
    

    // server.js

    app.use('/shelf', require('./handler'));
    app.use('/shelf', require('./books').middleware);
    

    【讨论】:

    • 我想在不同的文件中进行验证,然后继续路由。所以在 server.js 之后我希望能够签入 handler.js 然后继续。服务器->处理程序->书籍
    • 我也希望能够发布 /shelf 并记录一些东西,但现在它无法响应 /post Shelf
    • 从 app.use 中移除 '/shelf',然后 app.post('/shelf', ...); app.post('/shelf/:book', ...);
    猜你喜欢
    • 2021-10-29
    • 2020-12-20
    • 2021-08-12
    • 1970-01-01
    • 2014-01-16
    • 2019-04-11
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多