Nodejs express.router 报错 解决办法

Nodejs express.router 报错 解决办法

app.js:

/*************************** Begain of app.js ******************************** /

var express = require(‘express’);

// 路由文件 var routes = require(’./routes’); // 默认路由文件 index.js var my = require(’./routes/my’); // Notice: my.js是自定义的路由文件 var http = require(‘http’); var path = require(‘path’); var util = require(‘util’); var partials = require(‘express-partials’); var app = express();

// all environments app.set(‘port’, process.env.PORT || 3000); app.set(‘views’, path.join(dirname, ‘views’)); // 页面模板位置 app.set(‘view engine’, ‘ejs’); // 模板引擎 app.use(partials()); app.use(express.favicon()); app.use(express.logger(‘dev’)); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(express.cookieParser(‘your secret here’)); app.use(express.session()); app.use(app.router); // Notice app.use(express.static(path.join(dirname, ‘public’)));

// development only if (‘development’ == app.get(‘env’)) { app.use(express.errorHandler()); }

// 路由 注意先后顺序 routes(app); my(app);

http.createServer(app).listen(app.get(‘port’), function(){ console.log('Express server listening on port ’ + app.get(‘port’)); });

/*************************** End of app.js ****************************** /

my.js: // 路由文件

/************************** Begain of my.js ********************************/

module.exports = function(app) { app.get(’/my’, function(req, res) { res.send(‘This is the mongodb page for test.’); });

} /****************************** End of my.js *************************/


6 回复

Nodejs express.router 报错 解决办法

在使用 express.router 的过程中,可能会遇到一些常见的错误。以下是一些可能遇到的问题及对应的解决方法。

问题描述

假设你已经按照上面的代码配置了你的 app.jsmy.js 文件,但在运行应用时遇到了一些错误。

常见错误及解决方法

  1. 未正确加载路由文件

    确保你在 app.js 中正确地引入并调用了路由文件。例如:

    // app.js
    var express = require('express');
    var routes = require('./routes'); // 默认路由文件 index.js
    var my = require('./routes/my'); // 自定义的路由文件
    
  2. 路由函数没有正确绑定

    确保你在 my.js 中的路由函数正确地绑定到 app 对象上。例如:

    // my.js
    module.exports = function(app) {
        app.get('/my', function(req, res) {
            res.send('This is the mongodb page for test.');
        });
    }
    
  3. 确保路由文件被正确调用

    app.js 中,确保你按正确的顺序调用了路由文件:

    // app.js
    routes(app);
    my(app);
    
  4. 检查中间件的使用

    确保所有必要的中间件都已正确加载。例如,express.json()express.urlencoded() 应该在 app.router 之前加载,以确保它们能处理请求体数据。

    // app.js
    app.use(express.json());
    app.use(express.urlencoded());
    app.use(app.router);
    
  5. 检查依赖库的版本

    确保你使用的 express 和其他相关库的版本是最新的或兼容的。例如,如果你使用的是较新版本的 expressexpress.router 可能已经被移除,你可以直接使用 app.get 方法。

    // app.js
    var express = require('express');
    var router = express.Router();
    
    router.get('/my', function(req, res) {
        res.send('This is the mongodb page for test.');
    });
    
    module.exports = router;
    

示例代码

以下是经过修正后的代码示例:

app.js

// app.js
var express = require('express');
var routes = require('./routes'); // 默认路由文件 index.js
var my = require('./routes/my'); // 自定义的路由文件
var http = require('http');
var path = require('path');
var util = require('util');
var partials = require('express-partials');
var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views')); // 页面模板位置
app.set('view engine', 'ejs'); // 模板引擎
app.use(partials());
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
    app.use(express.errorHandler());
}

// 路由 注意先后顺序
routes(app);
my(app);

http.createServer(app).listen(app.get('port'), function(){
    console.log('Express server listening on port ' + app.get('port'));
});

my.js

// my.js
module.exports = function(app) {
    app.get('/my', function(req, res) {
        res.send('This is the mongodb page for test.');
    });
}

通过以上步骤,你应该能够解决大部分与 express.router 相关的问题。如果仍然有问题,请检查具体的错误信息,并根据错误信息进行调试。


不是app.use(app.router)的错,而是启动静态文件的错 应该是app.use(express.static(path.join(__dirname, ‘public’)));

Thinks

真细心啊

根据你提供的 app.jsmy.js 文件的内容,你的报错可能是由于某些不兼容的模块或者配置问题。以下是一些常见的解决方法和建议:

  1. 确保安装了所有必需的依赖项: 确保你已经安装了所有必需的模块。你可以使用 npm install 来安装所有依赖项。

    npm install express express-partials ejs
    
  2. 更新 app.js 中的 express.router 使用方式: 在较新版本的 Express 中,app.router 已经被弃用。你可以直接使用 app.use 替代。

    修改 app.js 如下:

    var express = require('express');
    var routes = require('./routes'); // 默认路由文件 index.js
    var my = require('./routes/my'); // Notice: my.js是自定义的路由文件
    var http = require('http');
    var path = require('path');
    var util = require('util');
    var partials = require('express-partials');
    
    var app = express();
    
    // all environments
    app.set('port', process.env.PORT || 3000);
    app.set('views', path.join(__dirname, 'views')); // 页面模板位置
    app.set('view engine', 'ejs'); // 模板引擎
    app.use(partials());
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded());
    app.use(express.methodOverride());
    app.use(express.cookieParser('your secret here'));
    app.use(express.session());
    app.use(express.static(path.join(__dirname, 'public')));
    
    // development only
    if ('development' == app.get('env')) {
        app.use(express.errorHandler());
    }
    
    // 路由 注意先后顺序
    routes(app);
    my(app);
    
    http.createServer(app).listen(app.get('port'), function() {
        console.log('Express server listening on port ' + app.get('port'));
    });
    
  3. 检查 my.js 文件中的语法错误: 确保 my.js 文件中的语法没有问题。以下是修正后的 my.js

    module.exports = function(app) {
        app.get('/my', function(req, res) {
            res.send('This is the mongodb page for test.');
        });
    };
    

通过以上步骤,你应该可以解决你遇到的问题。如果仍然存在其他错误,请提供具体的错误信息以便进一步诊断。

回到顶部