app.get不是express.js中的函数

时间:2018-07-04 18:06:55

标签: node.js function express module require

我实际上无法弄清楚为什么在下面的代码片段的index.js文件中抛出一个错误:app.get不是一个函数。  请帮帮我..

//这是我的app.js文件

const express = require('express');
const app = express();
const helpers = require('./helpers');
const routes = require('./index')

app.use((req, res, next) => {
    app.locals.h = helpers;
    next();
});

app.use('/', routes);

app.set('views',(__dirname));
app.set('view engine', 'pug');

app.listen(3000,()=>console.log('port 3000'));

module.exports = app;

//这是我的index.js文件

const app = require('./app')

app.get('/',(req,res) => {
   res.render('template');
})

module.exports = router;

// helpers.js

exports.title = "NODEjs";

// template.pug

doctype html
html
  head
    title=`${h.title}`
  body
    h1 myHeading #{h.title}

3 个答案:

答案 0 :(得分:0)

您有一个循环的依赖循环,而不是创建无限循环,require()子系统会检测到该循环并无法加载您的模块。

app.js中,加载index.js。在index.js中,加载app.js。循环依赖循环。

可以使用两种单独的技术来解决您的特定问题。您似乎正在使用一种技术,而另一种则会造成问题。

在单独文件中定义新路由的经典方法是仅使该文件创建并导出自己的路由器。然后,它将路由分配给路由器(而不是分配给app),因此其他文件根本不需要app对象。因为您显示module.exports = router,所以看来您拥有该技术的一部分,但只有一部分。

这是代码以这种方式工作的方式:

// app.js
const express = require('express');
const app = express();
const helpers = require('./helpers');

app.use((req, res, next) => {
    app.locals.h = helpers;
    next();
});

// hook in routes from the index.js router
app.use('/', require('./index'));

app.set('views',(__dirname));
app.set('view engine', 'pug');

app.listen(3000,()=>console.log('port 3000'));


// index.js
const router = require('express').Router();
router.get('/',(req,res) => {
    res.render('template');
});

module.exports = router;

您也可以在加载时将app传递给index.js,而不用尝试导入app。这也解决了循环依赖问题。

const express = require('express');
const app = express();
const helpers = require('./helpers');

// pass app here so it can register routes
require('./index')(app);

app.use((req, res, next) => {
    app.locals.h = helpers;
    next();
});

app.use('/', routes);

app.set('views',(__dirname));
app.set('view engine', 'pug');

app.listen(3000,()=>console.log('port 3000'));

更改index.js以导出您调用的模块构造函数,并将app传递给:

module.exports = function(app) {
    app.get('/',(req,res) => {
        res.render('template');
    })
}

答案 1 :(得分:0)

在第一行添加括号:

const express = require('express')();

答案 2 :(得分:0)

第一个答案应该被接受。 在这种情况下,仅由于循环依赖性而发生这种情况。