简体   繁体   English

TypeError:无法读取未定义的属性“推送”-Express

[英]TypeError: Cannot read property 'push' of undefined -Express

I have written two Javascript files for nodejs application which uses express to route and for the creation of server.As i am beginner i don't know much about it.我已经为 nodejs 应用程序编写了两个 Javascript 文件,它们使用 express 来路由和创建服务器。因为我是初学者,所以我不太了解它。 When i am running the application,it is showing me the following error :-当我运行应用程序时,它向我显示以下错误:-

/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)

index.js file is as follows :- index.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);

api.js file is as follows :- api.js 文件如下:-

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;

Could anyone tell me the answere for this.谁能告诉我这个答案。

My problem was missing parentheses:我的问题是缺少括号:

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

Changing this to将此更改为

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

solved my problem.解决了我的问题。

This error occurs whenever you import Router from the Express module and then use the variable directly instead of reassigning it.每当您从 Express 模块导入 Router 然后直接使用该变量而不是重新分配它时,就会发生此错误。

BAD CODE错误代码

import { Router as router} from express;

router.get('/', ( req, res) => {
  return res.send(req.context.models.users[req.context.me.id]);
});

There are other ways these bad codes could have occurred but the rule is DON'T USE THE ROUTER VARIABLE DIRECTLY , REASSIGN IT这些错误代码还有其他可能发生的方式,但规则是DON'T USE THE ROUTER VARIABLE DIRECTLY , REASSIGN IT

GOOD CODE好代码

import { Router as expressRouter } from 'express';

const router = expressRouter();

router.get('/', (req, res) => {
  return res.send(req.context.models.users[req.context.me.id]);
});

OR或者

import { Router } from 'express';

const router = Router();

router.get('/', (req, res) => {
  return res.send(req.context.models.users[req.context.me.id]);
});
const experss = require('express');
const router = express.Router();

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

module.exports = router;

the above code should work.上面的代码应该可以工作。

You have:你有:

router = express.Router()

You should declare your variable with const :你应该用const声明你的变量:

const router = express.Router()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM