Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Javascript TypeError:无法读取属性';推动';未定义表达式的定义_Javascript_Node.js_Express - Fatal编程技术网

Javascript TypeError:无法读取属性';推动';未定义表达式的定义

Javascript TypeError:无法读取属性';推动';未定义表达式的定义,javascript,node.js,express,Javascript,Node.js,Express,我已经为nodejs应用程序编写了两个Javascript文件,该应用程序使用express来路由和创建服务器。 当我运行应用程序时,它向我显示以下错误:- /usr/lib/node_modules/express/lib/router/index.js:472 this.stack.push(layer); ^ TypeError: Cannot read property 'push' of undefined at Function.use

我已经为nodejs应用程序编写了两个Javascript文件,该应用程序使用express来路由和创建服务器。 当我运行应用程序时,它向我显示以下错误:-

/usr/lib/node_modules/express/lib/router/index.js:472
    this.stack.push(layer);
              ^

TypeError: Cannot read property 'push' of undefined
    at Function.use (/usr/lib/node_modules/express/lib/router/index.js:472:15)
    at Object.<anonymous> (/home/dhiresh/Coding/angularjsapp/api.js:9:3)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/home/dhiresh/Coding/angularjsapp/index.js:2:7)
api.js文件如下:-

var express = require('express'),
api = require('./api'),
app=express(); 

app
.use(express.static('./public'))
.use('/api',api)
.get('*',function (req,res) {
    res.sendfile('public/index.html');
}).listen(3000);
var express = require('express'),
 bourne = require('bourne'),
 bodyParser= require('body-parser'),

 db = new bourne('data.json'),

 router =express.Router(); 

 router
 .use(function(req,res,next){
    if(!req.user) req.user={ id:1 };
    next();
 })
 .use(bodyParser.json())
 .route('/contact')
 .get(function(req,res){
    db.find({userId : parseInt(req.user.id,10)},function(err,data){
        res.json(data);
    });
 })
 .post(function(req,res){
    var contact = req.body;
    contact.userId = req.user.id;

    db.insert(contact,function(err,data){
        res.json(data);
    });
 });

 router
 .param('id',function(req,res,next){
    req.dbQuery = { id:parseInt(req.params.id,10) }
 })
 .route('/contact/:id')
 .get(function(req,res){
    db.findOne(req.dbQuery,function(err,data){
        res.json(data);
    });
 })
 .put(function(req,res){
        var contact = req.body;
        delete contact.$promise;
        delete contact.$resolve;
        db.update(req.dbQuery,function(err,data){
        res.json(data[0]);
    })
    })
 .delete(function(req,res){
    db.delete(req.dbQuery,function(err,data){
        res.json(null);         
    })
 });

module.exports = router;

有人能告诉我这个问题的答案吗。

当您从Express模块导入路由器,然后直接使用变量而不是重新分配它时,就会发生此错误

错误代码
从express导入{Router as Router};
路由器.get(“/”,(请求,res)=>{
返回res.send(req.context.models.users[req.context.me.id]);
});
这些坏代码还有其他可能发生的方式,但规则是
不要直接使用路由器变量,重新分配它

好代码
从“express”导入{Router as expressRouter};
const router=expressRouter();
路由器.get(“/”,(请求,res)=>{
返回res.send(req.context.models.users[req.context.me.id]);
});
从“express”导入{Router};
常量路由器=路由器();
路由器.get(“/”,(请求,res)=>{
返回res.send(req.context.models.users[req.context.me.id]);
});

我的问题是缺少括号:

const router = require('express').Router;
将此更改为

const router = require('express').Router(); 
解决了我的问题

const experss = require('express');
const router = express.Router();

router.get('/', (req, res) => res.send('Root route'))

module.exports = router;

上面的代码应该可以工作。

bump^^^刚刚也遇到了这个问题,源代码是node_modules/express/lib/router/index.js:502 this.stack.push(layer);真的,这应该被接受,因为OP从未问过ES2017导入语法。你能详细说明一下这是如何解决作者的问题的吗?没有任何解释的代码片段似乎与问题无关,这是没有帮助的。如果你还没有,你应该使用s的指导方针来改进你的答案。