express 路由一直报错

WRONG: { Error: Not Found
    at F:\nodeServer\frontend_service\dist\app.js:65:15
    at Layer.handle [as handle_request] (F:\nodeServer\frontend_service\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (F:\nodeServer\frontend_service\node_modules\express\lib\router\index.js:312:13)
    at F:\nodeServer\frontend_service\node_modules\express\lib\router\index.js:280:7
    at Function.process_params (F:\nodeServer\frontend_service\node_modules\express\lib\router\index.js:330:12)
    at next (F:\nodeServer\frontend_service\node_modules\express\lib\router\index.js:271:10)
    at cookieParser (F:\nodeServer\frontend_service\node_modules\cookie-parser\index.js:56:14)
    at Layer.handle [as handle_request] (F:\nodeServer\frontend_service\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (F:\nodeServer\frontend_service\node_modules\express\lib\router\index.js:312:13)
    at F:\nodeServer\frontend_service\node_modules\express\lib\router\index.js:280:7 status: 404 }
    

app.js代码

import express from 'express';
import path from 'path';
//import favicon from 'serve-favicon';
import cookieParser from 'cookie-parser';
import bodyParser from 'body-parser';
import template from 'art-template';
import {rootPath} from './cfg/path';
//页面通用请求
import common from './routes/common';
//监控请求
import moniter from './routes/monitor';

const app = express();

// view engine setup
template.config('base', '');
template.config('extname', '.html');
app.engine('.html', template.__express);
app.set('view engine', 'html');
app.set('views', path.join(rootPath, './views'));

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: false
}));
app.use(cookieParser());
//将静态资源访问目录设置到public下,访问时目录名指定为files(可以指定任意名称)
app.use('/frontend_service/files', express.static(path.join(rootPath, './public')));

app.use('/frontend_service/common', common);

app.use('/frontend_service/monitor', moniter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    let err = new Error('Not Found');
    err.status = 404;
    console.error('WRONG:', '404 Not Found');
    next(err);
});

// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        console.error('WRONG:', err);
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    console.error('WRONG:', err);
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

module.exports = app;

common.js代码

//监听接收get请求
router.get('/', function(req, res, next) {

    requestCombine(req, res, next, 1);

});

//监听接收post请求
router.post('/', function(req, res, next) {

    requestCombine(req, res, next, 2);

});

没什么特别的啊,之前有一个监控的路由都是这么写的.搞了半天没搞懂是什么原因.
stackflow上面有说是直接把404错误注掉,不过这肯定不是最好的做法
有人遇到过这种错误吗?
麻烦了...

阅读 8.5k
5 个回答
  1. 确定你的common.js引入路径是否正确

  2. 确定你的requestCombine(req,res,next,x)方法里是否报错

  3. 个人觉得是你的路径问题

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    let err = new Error('Not Found');
    err.status = 404;
    console.error('WRONG:', '404 Not Found');
    next(err);
});

你这个中间件一加,等于所有的请求都会new一个404的error,然后抛出来了,你要加个限制条件再抛error哈。

一看就是语法错误!

新手上路,请多包涵
这个问题很简单,其实是你项目app.js文件中路由中间件配置的顺序问题,你将404、错误页等全局中间件移动到所有路由中间件之后就行了。

就拿你原来的代码举个例子吧:

/********************************  这里是项目的路由配置 **************************************/
app.use('/', indexRouter)
...

/******************************* 这里配置你的全局错误页等中间件 *******************************/

// catch 404 and forward to error handler
app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});


// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) { 
        ...
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) { 
    ...
});

// login handler
    ... 
    
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题