Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Expressjs-TypeError:无法读取属性';应用';未定义的_Node.js_Express - Fatal编程技术网

Node.js Expressjs-TypeError:无法读取属性';应用';未定义的

Node.js Expressjs-TypeError:无法读取属性';应用';未定义的,node.js,express,Node.js,Express,我知道关于这个错误还有其他问题,但没有一个对我有帮助。一切都很好,直到我决定添加委托和改变我的目录结构 我尝试更改我的路线正在加载的订单,但没有成功 这是server.js: 'use strict'; const express = require('express'); const consign = require('consign'); const path = require('path'); const cookieParser = require('cookie-parser'

我知道关于这个错误还有其他问题,但没有一个对我有帮助。一切都很好,直到我决定添加委托和改变我的目录结构

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

这是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;
这是文件夹结构:

并运行npm启动:


根据示例代码,您似乎没有正确使用
委托。所包含的文件(使用
。include
。然后
)应导出一个以express app为参数的函数。签入委托回购。使用提供给
.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);
}

接下来,您将使用的所有其他文件中都会发生类似的更改,按照示例代码,您似乎没有正确使用
委托

。所包含的文件(使用
。include
。然后
)应导出一个以express app为参数的函数。签入委托回购。使用提供给
.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);
}

然后在所有其他文件中进行类似的更改,这些文件将与
委托

一起使用,您将旧的express语法与新的express语法混合在一起。如果您切换到新的express语法来声明路由,并将所有包升级到其express 4.x版本,如果尚未升级,则将express自身升级到4.x,则错误可能会消失。在索引文件中路由的方式类似于express 2.x语法。此外,您的路由需要在中间件之后,而不是在确定之前。。。谢谢,我将这样做,他们现在可能都依赖于express 3/4,所以只需安装最新版本并将其保存在您的package.json中<代码>npm安装--save
应该更新旧的。我改变了调用路由的方式并运行npm安装,正如您所说,更改了委托订单,但只有在我完全删除委托后,它才起作用。请检查他们的回购协议,看它是否过期/未得到维护。不幸的是,这是许多node.js存储库都会遇到的问题。如果您确定它不是由您的代码引起的,我也会尝试在他们的github页面上报告这个bug。还可以考虑,<>代码>委托/代码>和你使用的另一个中间件库之间可能存在冲突。如果您切换到新的express语法来声明路由,并将所有包升级到其express 4.x版本,如果尚未升级,则将express自身升级到4.x,则错误可能会消失。在索引文件中路由的方式类似于express 2.x语法。此外,您的路由需要在中间件之后,而不是在确定之前。。。谢谢,我将这样做,他们现在可能都依赖于express 3/4,所以只需安装最新版本并将其保存在您的package.json中<代码>npm安装--save应该更新旧的。我改变了调用路由的方式并运行npm安装,正如您所说,更改了委托订单,但只有在我完全删除委托后,它才起作用。请检查他们的回购协议,看它是否过期/未得到维护。不幸的是,这是许多node.js存储库都会遇到的问题。如果您确定它不是由您的代码引起的,我也会尝试在他们的github页面上报告这个bug。还可以考虑,<>代码>委托/代码>和您正在使用的另一个中间件库之间可能存在冲突。