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

dba5bblo  于 2023-02-07  发布在  Java
关注(0)|答案(5)|浏览(124)

我已经写了两个Javascript文件的nodejs应用程序,其中使用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)

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文件如下所示:

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;

谁能告诉我这个问题的答案。

pw9qyyiw

pw9qyyiw1#

我的问题是缺少括号:

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

将此更改为

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

解决了我的问题。

djp7away

djp7away2#

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

错误代码

import { Router as router} from express;

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

这些错误代码可能有其他原因,但规则是DON'T USE THE ROUTER VARIABLE DIRECTLY , REASSIGN IT

良好代码

import { Router as expressRouter } from 'express';

const router = expressRouter();

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

import { Router } from 'express';

const router = Router();

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

41zrol4v3#

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

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

module.exports = router;

以上代码应该可以工作。

z31licg0

z31licg04#

您已经:

router = express.Router()

应该使用const声明变量:

const router = express.Router()
jecbmhm3

jecbmhm35#

此错误可能是下列情况之一。
解决方案1:

    • 错误导入:**router = require('express').Router();
    • 正确导入:**const router = require('express').Router();说明:如果您导入express模块及其方法,而不使用'const'关键字;它将生成这样错误

解决方案二:

    • 错误导入:**const router = require('express').Router;
    • 正确-导入:**
const router = require('express').Router();
 Explanation: Importing the method Router without the parenthesis will also
 possibly generate such an error message

相关问题