2015-07-12 2 views
0

Я делаю базовый веб-сервер, используя nodejs и express module. Он должен уметь отвечать на запросы POST и GET. POST просто отлично работает, но GET ничего не возвращает. В консоли есть textStatus ошибки parserror и SyntaxError: Unexpected end of input at Object.parse (native) at jQuery.parseJSON ошибка. Я новичок в NodeJS и Express, скажите, пожалуйста, где я ошибся.Получить запрос не работает на стороне сервера

var express = require('express'), 
    server = express(), 
    fs = require('fs'); 

server.use(express.static('../client')); 

server.post('/students.json', function (req, res) { 
    var bodyStr = ''; 
    req.on('data', function (chunk) { 
     bodyStr += chunk.toString(); 
    }); 
    req.on('end', function() { 
     fs.readFile('students.json', function (err, data) { 
      var encodedObj = data.toString('utf8'), //encoding what's inside of .json into human symbols 
       parsedObj = JSON.parse(encodedObj); 
      parsedObj.push(JSON.parse(bodyStr)); //adding newly created parsed obj into array 

      fs.writeFile('students.json', JSON.stringify(parsedObj), function (err) { //rewriting file with new array 
       if (err) { 
        console.log(err); 
       } 
      }); 
     }); 
    }); 
}); 

server.get('/students.json', function (req, res) {//what's wrong??? 
    res.send(); 
}); 

var server = server.listen(8888); 
+0

Запуск его здесь не производят каких-либо ошибок. Он правильно ничего не возвращал при вызове get к '/ students.json' на моем компьютере. Я бы предположил, что это должно быть в коде в другом месте? –

+0

В этом проблема, я хочу вернуть файл student.json обратно клиенту. Как я могу это сделать? – Ivan

ответ

1

Что вы пытаетесь res.send()? Мне это кажется пустым. Попробуйте:

res.send('Hello World!'); // A string 

... или ...

res.send([{'name': 'Joe Student'},{'name': 'Sally Goestoskuhl'}]); // Array 

... или ...

res.send({}); // Empty json response 

... или ...

res.send(404); // Any integer is considered an HTTP error code 

... или ...

res.setHeader('Content-Type', 'application/json'); 
res.send(JSON.stringify({ variable: 'value' })); 

... или ...

// Assuming your json is in the public folder... 
res.sendFile(path.join(__dirname, '../public', 'students.json')); 
+0

Я хочу отправить файл students.json. Как это сделать? – Ivan

0

res.send(); по себе просто посылает пустой ответ. Если вы затем попробуете json_decode, вы получите сообщение об ошибке.

Если я правильно истолковал ваш вопрос, вы хотите, чтобы как POST, так и GET возвращали тот же результат?

Вы можете сделать это довольно просто, как это:

function sendJSON(req, res) 
{ 
    //JSON code from your existing server.post 
} 

app.get('/students.json', sendJSON); 
app.post('/students.json', sendJSON); 
+0

На самом деле я хочу вернуть файл json. Я извлекаю его с клиентской стороны с помощью Backbone. Это может звучать очень просто, но я действительно не могу найти ответ, как это сделать. – Ivan