Express.js-TypeError:无法读取未定义的属性“ apply”

时间:2019-06-02 18:39:52

标签: node.js express

我知道关于此错误还有其他问题,但是没有一个问题对我有帮助。一切正常,直到我决定添加托运货物并更改目录结构。

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

这是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

1 个答案:

答案 0 :(得分:0)

按照您的示例代码,您似乎没有正确使用consign。包含的文件(此后使用.include.then)应导出一个以express app作为参数的函数。检查寄售仓库中的this example。每个包含的文件中的函数都会与您提供给.into()的对象一起调用。您可以放开托运货物,并手动要求和使用文件中的每个文件,这似乎可以按照您的评论进行操作。

否则,您可以将路由文件更改为以下内容:

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一起使用的所有其他文件中进行了类似的更改。