如何在node.js

时间:2016-02-25 03:23:01

标签: node.js express utf-8 body-parser

我住在韩国

韩国网站没有标准化utf-8

有时我会收到“euc-kr”字符串

所以它发生了错误

当我使用In express 3.x.它自动生成utf-8

app.use(express.static(__dirname));
app.use(connect.json());
app.use(connect.urlencoded('utf-8')); <-- this

但现在我使用快递4.x它不是那个

app.use(express.static(path.join(__dirname)));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

所以我不知道如何输入urlencoded'utf-8'选项

如何知道在快递4.x中输入utf-8选项?

app-0 UnsupportedMediaTypeError: unsupported charset "EUC-KR"
app-0     at urlencodedParser (/home/node/Node/node_modules/body-parser/lib/types/urlencoded.js:102:12)
app-0     at Layer.handle [as handle_request] (/home/node/Node/node_modules/express/lib/router/layer.js:95:5)
...

1 个答案:

答案 0 :(得分:1)

一般情况下,默认情况下它应该是utf-8,但在这种情况下请尝试:

app.use(bodyParser.text({defaultCharset: 'utf-8'}));

无论如何你要解析JSON,看起来如此,'utf-8'无法解决你的问题因为bodyParser无法正常使用这种数据格式。例如,如果您尝试使用request.body获取POST数据,则可以找到类似的内容

  

{'{data1':'stringExample','data2':123}':''}   或者有时候是烦恼   未定义

在这里阅读一个很好的解释enter link description here

尝试改变这一点:

  

app.use(bodyParser.json());

     

app.use(bodyParser.urlencoded({extended:true}));

使用:

var jsonParser = bodyParser.json();
var urlencodedParser = bodyParser.urlencoded({ extended: false });

var urlNotEncodedParser = function(req, res, next)
{
  rawBody = '';

  req.on('data', function(chunk) {
       rawBody += chunk;

       if (rawBody.length > 1e6) requereqst.connection.destroy();
       });

  req.on('end', function() {
       req.rawBody = JSON.parse(rawBody);
       next();
       });
};

并在需要时使用它们:

//without body-parser
app.post('/json', urlNotEncodedParser, requestJsonCTRL);

//with body-parser
app.post('/notjson', urlencodedParser, requestCTRL);    

//or catching all other request with routes
app.use('/', urlencodedParser, routes);

通过这种方式,您可以在没有body-parser的情况下将Json数据作为原始数据(因为它已发送)捕获,然后使用本机json解析器进行解析。 详细了解here以及是否需要使用GET网址here Byee