根据下面提供的代码解决以下错误的任何建议都将不胜感激,因为我只是迷失在这里:
~/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)
首先,这是我的app目录的相关结构:
- 的public_html
--node_modules
- 表达
--pg
--body分析器
--server
--routes
api.js
index.js
server.js
我在server.js中为我的路线设置了一个基本的快递应用程序:
// 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 call:
// 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;
答案 0 :(得分: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