代码之家  ›  专栏  ›  技术社区  ›  Shahar Shokrani

常规“NodeJs/express”声明路由时出错(TypeError:无法读取pathtoRegexp处未定义的属性“length”)

  •  0
  • Shahar Shokrani  · 技术社区  · 6 年前

    我是新来的 node.js ,这个错误让我付出了很多努力,所以我分享这个。

    我只想申报 express

    const express = require('express');
    const app = express();
    
    app.get('/api/courses', (req, res)=>{
        res.send(courses);
    });
    
    app.get('/api/courses:id', (req, res)=>{
        const course = courses.find(c => c.id === parseInt(req.params.id));
        if (!course) res.send('The given id was not found...');
        res.send(course);   
    });
    
    app.get();
    

    错误详细信息:

    \节点\模块\ regexp的路径\索引js:63路径=('^'+路径+ (严格的?“”:路径[路径长度- 1] === '/' ? '?' : '/?')) ^

    TypeError:无法读取未定义的属性“length” 在pathtoRegexp(C:\Users…\node\u modules\path to regexp\索引js:63:49) 在新层(C:\Users…\node\u modules\express\lib\router)\图层js:45:17) 在函数.route(C:\Users…\node\u modules\express\lib\router)\索引:494:15) 在物体上。(丙:\索引:24:5) 在模块负载(模块.js:565:32) 在功能模块.\u负载(模块.js:497:3)

    2 回复  |  直到 6 年前
        1
  •  3
  •   Dharman Sebastian    4 年前

    这个错误背后的原因是使用 app.get() 不带param的方法,该方法要求端点url和回调作为参数。

        2
  •  2
  •   Shahar Shokrani    6 年前

    这个 app.get();

    作为 documentation app.get(path, callback [, callback ...]) 必须有路径参数(也是 app.get(name) 必须有name参数)。

        3
  •  2
  •   test_124 Jim Flood    5 年前

    所以我对这个问题的发现是检查节点.js要求。

        4
  •  1
  •   Jemail    4 年前
    const express = require('express');
    const app = express();
    
    app.get('/api/courses', (req, res)=>{
        res.send(courses);
    });
    
    app.get('/api/courses:id', (req, res)=>{
        const course = courses.find(c => c.id === parseInt(req.params.id));
        if (!course) res.send('The given id was not found...');
        res.send(course);   
    });
    
    app.get(); // <= Remove this line of code and it will work. you need the path parameter in order for a app.get() to work