2016-12-14 2 views
0

У меня возникла проблема с отправкой json-данных с угловых символов front-end для выражения nodejs. Вот что я пробовал.Отправка данных JSON от angularjs to nodejs

frontend.html страница

<form ng-submit="func()"> 
    <textarea name="inputtext" type="text" ng-model="sentence"></textarea> 
</form> 

backend.js страница

$scope.func = function(){ 

$scope.jsondata = {"status":"OK","language":"english","sentences":[{"sentence":"That's a nice restaurant."},{"sentence":"Also I went to another bad restaurant."},{"sentence":"I didn't like that movie."}]} 

$http.post('/sample',$scope.jsondata).success(function(data,status){ 
     console.log("Success"); 
    }) 
} 

server.js

var express = require('express'); 
var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var bodyParser = require('body-parser'); 
var path = require('path'); 
var fs = require('fs'); 

app.set('views', __dirname + '/views'); 
app.set('view engine' , 'ejs'); 

app.use(bodyParser.json()); 
var urlencodedParser = bodyParser.urlencoded({ extended: true }); 

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

app.get('/',function(req,res){ 
    res.render('index',{ title: 'Sentence' }); 
}); 
app.post('/sample',urlencodedParser,function(req,res){ 
    console.log(req.body); 
}); 
http.listen(8888, function(){ 
    console.log("Server listening on 8888"); 
}); 

I я не получаю точный JSON в части узла узла. Это то, что я получаю.

выход

{ '{"status":"OK","language":"english","sentences":': { '{"sentence":"That\'s a nice restaurant."},{"sentence":"Also I went to another bad restaurant."},{"sentence":"I didn\'t like that movie."},{"sentence":"Thats a very bad movie."}': '' } } 

Может ли один помочь, как я могу получить точную JSON в серверной части узла. Так что я могу разобрать и написать только поле предложения в файл.

ответ

0

$ http POST-вызов, принимает объект, а не json.So вам нужно подкрепить свой JSON перед отправкой его на сервер.

$http.post('/sample',JSON.stringify($scope.jsondata)).success(function(data,status){ 
     console.log("Success"); 
    }) 
} 
+0

Привет, спасибо за ответ. Я пробовал ** JSON.stringify ($ scope.jsondata) **. Но все же я получаю тот же результат. И на стороне сервера я не могу разобрать. – naik3

+0

Любой другой метод есть, так что мы можем разобрать JSON и записать поля предложения в файл только на стороне углового. – naik3

0

Вы создаете сообщение как JSON для отправки на узел?

Угловой будет делать это за вас, вы можете поставить и поставить объект в сообщении, как предлагает Ved, и Угловая магически изменит это на JSON для отправки на сервер узла.

$scope.func = function(){ 

$scope.data = {language:"english", sentences: [{sentence:"That's a nice restaurant."},{sentence:"Also I went to another bad restaurant."}, {"sentence":"I didn't like that movie."}]} 

$http.post('/sample',$scope.data).success(function(data,status){ 
    console.log("Success"); 
}) 
} 

Это будет читать на сервере как: [Object object] как модуль bodyparser НПМ в узле будет изменить его обратно на объект

0

Попытка установить тип данных в формате JSON, прежде чем отправить на сервер. Он будет установить Content-Type заголовок application/json который сервер может понять как JSON

$http({ 
    method: 'POST', 
    url: baseUrl + '/sample', 
    dataType: "json", 
    data: { 
     "status": "OK", 
     "language": "english", 
     "sentences": [{"sentence": "That's a nice restaurant."}, 
      {"sentence": "Also I went to another bad restaurant."}, 
      {"sentence": "I didn't like that movie."}] 
    } 
}).success(function (data, status) { 

}).error(function (data, status) { 

}) 

Update: Я попытался запустить свой исходный код и изменить немного, вы можете проверить, если ответ на это нужного формата. Оформить заказ этот репозиторий: https://github.com/nguyennb9/sample-angularjs-expressjs

+0

Привет, спасибо за ответ. Никаких изменений в выходе. Тем не менее он поступает в таком формате: '{'{" status ":" OK "," language ":" english "," предложения ":': {'{" sentence ":« Это хороший ресторан ». }, {"предложение": "Также я пошел в другой плохой ресторан."}, {"предложение": "Мне не понравился этот фильм."}, {"предложение": «Это очень плохой фильм». } ':' '}} ' – naik3

+0

вы можете проверить обновление моего ответа. – Finn

0

Использование приложения/JSON в заголовке, а метод POST

$http({ 
    method:'POST', 
    dataType: "json", 
    url: 'http://localhost:8000/saveform', 
    data : $scope.user, 
    headers: { 
     'Content-Type': 'application/json' 
    } 
    }).success(function(data){ 

    }); 
Смежные вопросы