DPlayer/nodejs/index.js

78 lines
2.3 KiB
JavaScript

var url = require('url');
var mongoose = require('mongoose');
var mongodbUrl = 'mongodb://' + process.env.MONGODB_USERNAME + ':' + process.env.MONGODB_PASSWORD + '@' + process.env.MONGODB_PORT_27017_TCP_ADDR + ':' + process.env.MONGODB_PORT_27017_TCP_PORT + '/' + process.env.MONGODB_INSTANCE_NAME;
var express = require('express');
var app = express();
var danmakuSchema = new mongoose.Schema({
player: String,
author: String,
time: Number,
text: String,
color: String,
type: String
});
var danmaku = mongoose.model('dan', danmakuSchema);
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
if (req.method == 'OPTIONS') {
res.send(200);
}
else {
next();
}
});
app.get('/', function(req, res) {
mongoose.connect(mongodbUrl);
var db = mongoose.connection;
db.on('error',console.error);
var id = url.parse(req.url,true).query.id;
db.once('open', function() {
danmaku.find({player: id}, function (err, data) {
if (err) {
console.error(err);
}
var json = `{"code": 1,"danmaku":[`;
for (var i = 0; i < data.length; i++) {
json += JSON.stringify(data[i]);
if (i !== data.length - 1) {
json += `,`;
}
}
json += `]}`;
res.write(json);
res.end();
db.close();
})
});
});
app.post('/', function (req, res) {
var body = '', jsonStr;
req.on('data', function (chunk) {
body += chunk;
});
req.on('end', function () {
try {
jsonStr = JSON.parse(body);
} catch (err) {
jsonStr = null;
}
var dan = new danmaku({player: jsonStr.player, author: jsonStr.author, time: jsonStr.time, text: jsonStr.text, color: jsonStr.color, type: jsonStr.type});
dan.save(function (err, d) {
if (err){
console.error(err);
}
});
});
});
app.listen(1207);