Emoji's cause Express server to crash

旧时模样 提交于 2019-12-20 03:23:35

问题


I am trying to create a POST with an emoji to my Express endpoint:

curl --data '{"x": 10, "y":10, "z":10, "message": "😋", "userToken": "Marine"}' --header "Content-Type:application/json" localhost:3000/api/messages

For some reason this crashes my server:

SyntaxError: Unexpected token
    at Object.parse (native)
    at parse (/Users/user/Documents/uncovery/node_modules/body-parser/lib/types/json.js:84:17)
    at /Users/user/Documents/uncovery/node_modules/body-parser/lib/read.js:102:18
    at IncomingMessage.onEnd (/Users/user/Documents/uncovery/node_modules/body-parser/node_modules/raw-body/index.js:149:7)
    at IncomingMessage.g (events.js:199:16)
    at IncomingMessage.emit (events.js:104:17)
    at _stream_readable.js:908:16
    at process._tickCallback (node.js:355:11)

I went to my router and put console.log's in my /messages endpoint to see what is being received but when Express crashes as a result of sending an emoji the console.log is never activated.

router.js

var models = require('../db/models.js');
var util = require('../core/utilities.js');
var sockets = require('../routes/sockets.js');

module.exports = function(router) {
  //input: {x: float, y: float, z: float, message: string, userToken: string}
  router.post('/messages', function(req, res) {
    console.log("Emoji: ", req.body);
    models.createMessage(req.body).then(
      util.resolvePOST.bind(this, req, res),
      util.rejectPOST.bind(this, req, res)
      );
  });
}

I suspect this has something to do with the middleware and not actually related to the routes, but when I google emojis crash node js I can't find anything relevant. Why is this happening?

index.js

var http = require('http');
var morgan = require('morgan');
var express = require('express');
var socketIO = require('socket.io');
var bodyParser = require('body-parser');

var util = require('./server/core/utilities.js');
var router = require('./server/routes/router.js');
var sockets = require('./server/routes/sockets.js');

var app = express();
var server = http.Server(app);

app.use(morgan('combined', util.getLogStream()));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json({ limit: '50mb' }));
app.use('/api', router);
app.use(express.static(__dirname + '/server/landing'));

var io = socketIO(server);
sockets.initialize(io);

server.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;
  console.log('Uncovery listening at http://%s:%s', host, port);
});

来源:https://stackoverflow.com/questions/29813108/emojis-cause-express-server-to-crash

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!