平均堆栈处理500(内部服务器错误)

时间:2016-06-02 21:55:39

标签: node.js redirect express mean-stack http-status-code-500

目前这就是我的nodejs / expressjs服务器端代码:

// Init Express Web Framework
var express = require('express');
var app = express();
var path = require('path');


// Set view engine to EJS & set views directory
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.set('views', path.resolve(__dirname, 'client', 'views'));

app.use(express.static(path.resolve(__dirname, 'client')));

//app.use(function(req, res, next) {
//    res.header('Access-Control-Allow-Origin', '*');
//    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
//    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
//    if (req.method === 'OPTIONS') {
//        res.send(200);
//    }
//    else {
//        next();
//    }
//});


// Database Connection
var mongoose = require('mongoose');
var configDB = require('./server/config/database.js');
require('./server/routes/capture');
require('./server/routes/comment');
require('./server/routes/vote');
require('./server/routes/follow');
mongoose.connect(configDB.url);

var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));               
app.use(bodyParser.text());                                    
app.use(bodyParser.json({ type: 'application/json'}));

// Main route
app.get('/', function(req, res){
    res.render('index.html');
});

// API 
var api = express.Router();
require('./server/routes/capture')(api);
require('./server/routes/comment')(api);
require('./server/routes/vote')(api);
require('./server/routes/follow')(api);
app.use('/api', api);

app.use(function(err, req, res, next) {
    res.status(err.status || 50, function(res) {
        res.render('error.html');
    });
});

// Port Settings
app.listen(process.env.PORT || 3000, process.env.IP);
console.log('Listening on port ' + process.env.PORT);

在我的客户端中,我有2个观看次数:我的index.html所有内容都会呈现,我有一个error.html,如果他们收到500错误,我想将其重定向到。 目前,如果人们转到不存在的链接,他们会被重定向到主页面。

但是当我使用存在但但参数不存在的url时,我得到500(内部服务器错误)。

使用我的服务器端底部的代码,我认为这些错误会被重定向到error.html页面,但由于某些原因它并没有。

在我的服务器日志中它没有错误,看到它应该重定向,但在我的客户端,我只是用错误的参数加载页面(并且当然没有内容,除了空元素,看不到任何内容)

我该如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:0)

一种方法是简单地定义// Error route app.get('/error', function(req, res){ res.render('error.html'); }); 路线,它看起来像:

/error

然后,如果(任何)错误发生,则重定向到res.redirect('/error'); 路由,即从您的服务器路由(*处理每个服务器路由中的错误)。

像:

    public List<VatRate> GetAll( string cnString )
    {
        List<VatRate> result = new List<VatRate>();
        using (SqlConnection cn = new SqlConnection(cnString))
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            cmd.CommandText = SQL_SELECT;
            cmd.CommandType = System.Data.CommandType.Text;
            cn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    VatRate vr = new VatRate();
                    vr.IDVatRate = reader["IDVatRate"] == System.DBNull.Value ? Guid.Empty : (Guid)reader["IDVatRate"];
                    vr.Percent = reader["Percent"].XxNullDecimal();
                    vr.Type = reader["Type"].XxNullString();
                    vr.VatRateDescription = reader["VatRateDescription"].XxNullString();
                }
            }
            reader.Close();
            cn.Close();
        }
        return result;
    }

希望这有帮助。