node.js - Expressjs - 类型错误 : Cannot read property 'apply' of undefined

标签 node.js express

我知道还有其他关于此错误的问题,但没有一个对我有帮助。一切都工作正常,直到我决定添加委托(delegate)并更改我的目录结构。

我尝试更改正在加载的路线的顺序,但没有成功

这是 server.js:

'use strict';

const express = require('express');
const consign = require('consign'); 
const path = require('path');
const cookieParser = require('cookie-parser');
const porta = 3000;

const app = express();
const pathFront = '../app/front/';

//app.use(require('../app/routes/'));


app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, pathFront + 'public')));

app.set('views', path.join(__dirname, pathFront + 'views'));
app.set('view engine', 'pug');

app.use(require('../app/routes/')); // still not working

// Tried to change the include order, did not work
consign()
    .include('./app/routes')
    .then('./config/db.js')
    .then('./app/back/api/models')
    .then('./app/back/api/controllers')
    .into(app);

module.exports = app;

这是路线索引:

'use strict';

var express = require('express');
var router = express.Router();


router.get('/', function(req, res, next) {
  res.render('index', { title: 'API' });
});

/* ENDPOINTS*/
/* 
  /languages -- all
  /language?idLanguage
  /language?name=
  /languages?idCategory
  /language?name=
  /categories
  //
*/

module.exports = router;

这是文件夹结构:

enter image description here

并运行 npm start:

e

最佳答案

根据您的示例代码,您似乎没有正确使用 consign 。包含的文件(后面使用 .include.then)应导出一个以 Express 应用程序作为参数的函数。检查this example在委托(delegate) repo 中。使用您提供给 .into() 的对象来调用每个包含文件中的函数。您可以很好地放弃委托(delegate),并手动要求和使用每个文件,这似乎按照您的评论工作。

否则,您可以将路线文件更改为如下所示:

server.js 没有改变。

app/routes/index.js 更改为以下内容:

'use strict';

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  res.render('index', { title: 'API' });
});

/* ENDPOINTS*/
/* 
  /languages -- all
  /language?idLanguage
  /language?name=
  /languages?idCategory
  /language?name=
  /categories
  //
*/

module.exports = function (app) {
  app.use('/', router);
}

随后,您将在 consign 中使用的所有其他文件中进行类似的更改。

关于node.js - Expressjs - 类型错误 : Cannot read property 'apply' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56417904/

相关文章:

javascript - "this"在嵌套的异步模块函数中如何正常运行?

javascript - 为什么我的数据库对象的集合为空?

javascript - 如何将输入元素 (text/select/radio) 的值发送到 node.js 服务器

node.js - 解析 Post 表单数据 Node.js Express

javascript - 如何将 ReadableStream 转换为 Readable

javascript - 条件 Jade 模板,用户登录

api - 如何拦截 node.js 快速请求

node.js - 在 Node.js/Express 中,如何为重定向禁用浏览器缓存?

node.js - Express:如何不断地将数据从 Controller 传递到 View

javascript - 浏览器 javascript 可以监听路由/url 吗?