【问题标题】:ExpressJS 4.0 exporting routes, getting TypeErrorExpressJS 4.0 导出路由,得到 TypeError
【发布时间】:2014-08-28 23:09:36
【问题描述】:

任何根据下面提供的代码解决以下错误的建议将不胜感激,因为我只是在这里迷路了:

~/public_html/server/routes/api.js:10
api.use(function(req, res, next){
    ^
TypeError: Cannot call method 'use' of undefined
    at Object.<anonymous> (~/public_html/server/routes/api.js:10:5)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (~/public_html/server/server.js:72:17)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)

首先,这是我的应用目录的相关结构:

--public_html
--node_modules
- 表示
    --pg
    --body-parser
  --服务器
    --路线
        api.js
        index.js
    server.js

我在 server.js 中为我的路线设置了一个基本的 express 应用程序:

// server.js
var express = require('../node_modules/express'),
    app = express(),
    bodyParser = require('../node_modules/body-parser'),

app.set('port', 3000);
app.use(bodyParser);

app.use('/api', require('./routes/api').api);
app.use('/', require('./routes/index').index);

// Start server
app.listen(app.get('port'), function () {
    console.log("listening on port %d in %s mode", app.get('port'), app.settings.env);
});

然后,在我的 api.js 中,我创建路由并定义我必要的 HTTP 动词。我将在这里展示 1 .get 调用:

// api.js
var pg = require('../../node_modules/pg'),
express = require('../../node_modules/express'),
connString = "postgres://db_user:xxxx@localhost:5432/db_name";

var api = express.Router();

api.use(function(req, res, next){
  console.log('in api.js...');
  next();
});

api.get('getUsers', function(req, res) {
  pg.connect(connString, function(err, client, done) {
  if (err) {
    console.error("Error fetching client from pool", err);
  } else {
    client.query('SELECT * FROM users', 
      function(err, result) {
          done();
          if (err) {
              console.error("Error querying database", err);
          } else {
              res.json(result[0]);
          }
      });
    }
  });
});

module.exports.api = api;

【问题讨论】:

    标签: node.js express node-postgres


    【解决方案1】:

    这里的问题是您需要依赖项的方式。由于它们是您在项目中安装的节点包,因此您不需要通过它们的文件路径来引用它们。事实上,如果你引用了错误的文件名,它可能会导致问题(当你引用一个文件夹时,它会自动尝试从该文件夹加载index.js)。

    所以在你的 server.js 文件中,改变这个:

    var express = require('../node_modules/express'),
        app = express(),
        bodyParser = require('../node_modules/body-parser');
    

    到这里:

    var express = require('express'),
        app = express(),
        bodyParser = require('body-parser');
    

    在您加载依赖项的其他地方也进行类似的更改,这些依赖项是您已安装的节点包。 (请注意:如果您引用您在项目中创建的本地文件,则需要按文件位置引用它。)

    有关 Node 如何通过 require 加载文件的更多信息,请参阅文档:http://nodejs.org/api/modules.html#modules_all_together

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      相关资源
      最近更新 更多