app.post不是函数表达节点

时间:2016-08-04 03:50:34

标签: javascript node.js express routes

我在server.js中拥有所有路由,但我想将其模块化并放入名为routes的文件夹中。我在routes文件夹中创建了一个名为apis.js的文件,但正如我所做的那样,我得到了TypeError: app.post is not a function

server.js:

var express    = require('express');
var app        = express();

var bodyParser = require('body-parser');
var urlencode = bodyParser.urlencoded({ extended: true});

app.use(express.static('public'));

var apis = require('./routes/apis');
app.use('/', apis);

module.exports = app;

apis.js:

  module.exports = function(app){

  app.get('/', function(req, res) {
    res.send('OK');
  });

  app.post('/idea', function(req, res) {
  ...
  });

};

此外,在server.js中使用module.exports = app非常重要,因为我已经运行了测试,而且我每次都想要一个app实例。

我错过了什么?

3 个答案:

答案 0 :(得分:7)

更好的方法: -

server.js

var express    = require('express');
var app        = express();

var bodyParser = require('body-parser');
var urlencode = bodyParser.urlencoded({ extended: true});

app.use(express.static('public'));

var apis = require('./routes/apis');
app.use('/', apis);

module.exports = app;

apis.js: -

var router = require('express').Router();
router.post('/url',function(req,res,next){
 //your code 
})

module.exports = router

答案 1 :(得分:0)

您需要将快速应用传递到apis模块中,以便将路线附加到您的应用中。如果您想使用app.use将路由放在不同的根路径中,您可以创建另一个快速路由器,并将路由附加到该路由器,然后app.use该路由器:

server.js:

var express    = require('express');
var app        = express();

var bodyParser = require('body-parser');
var urlencode = bodyParser.urlencoded({ extended: true});

app.use(express.static('public'));
var apis = express.Router();

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

app.use('/', apis);
module.exports = app;

答案 2 :(得分:0)

有几种不同的方法可以将您的应用程序连接到您的路线,在我看来,您将它们混合在一起,从而导致您的错误。

已经提到的修复......

data want ;
  update have(obs=0) have ;
  by id;
run;

...适用于您当前设置var router = require('express').Router(); router.post('/url',function(req,res,next){ //your code }) module.exports = router 文件的方式。

另一种不要求您修改server.js文件的方法是在apis.js中使用

来要求它
server.js

而不是

require("./routes/apis.js")(app);

这可确保将变量app传递到var apis = require('./routes/apis'); app.use('/', apis);

中的函数

建议使用第一个版本,但希望这可以解释为什么你在两者之间感到困惑,也就是因为第二个版本是备用版本。

有关推荐路由器版本的原因的详细信息,请参阅Differences between express.Router and app.get?