URIError:无法解码param' / December%2015,%'在框架表达

时间:2017-10-12 20:31:24

标签: javascript node.js express

使用快速框架我做了一个中间件,它处理一个以日期为参数的URI。

app.get("/:date",function(req,res){
     var result;
     var myDate=req.params.date

       if(moment(myDate).isValid()){
             //some code here
      } 

        else {
              //some code here
            }


  }

和http是例如:     https://theweb.com/December%2015,%2020

中间件运行良好。但如果http在%中完成     https://theweb.com/December%2015,% 它给出了一个错误:

URIError: Failed to decode param '/December%2015,%' 

我想要的是将消息显示中的错误转换为错误请求。

2 个答案:

答案 0 :(得分:0)

您可以注册一个错误处理程序,如下所示:

app.use(function(err, req, res, next) {
    console.log('hit error handler');

    res.sendStatus(err.status || 500);
});

请注意,即使您不使用所有参数,该函数也必须具有4个参数。然后,此函数可以以您认为合适的任何方式响应,在我的示例中,我刚刚发送回状态代码。对于err.status,快速设置URIError为400。

请参阅https://expressjs.com/en/guide/error-handling.html

答案 1 :(得分:0)

我已经使用过这个中间件,但没有结果。当URI为https://myweb.com/December%2015,%

时,它仍会出现相同的错误
URIError: Failed to decode param '/December%2015,%'

可能是代码的位置

var express = require('express');
var moment=require("moment")
var app = express();

app.use(express.static('public'));

app.use(function(err, req, res, next) {
       console.log('hit error handler');
       res.sendStatus(err.status || 500);
           });

app.get("/", function (request, response,next) {
    response.sendFile(__dirname + '/views/index.html');
       });

    app.get("/:date",function(req,res){

        var result; 

        var myDate=req.params.date //From here comes the error

       if(moment.unix(myDate).isValid()){
            // some code
            result={/*some code*/}
         } else if(moment(myDate).isValid()){
              //some code
              result={/*some code*/} 

        else {
              result={/*some code*/}
            }

        res.json(result)


    })