2015-11-06 1 views
0

я не могу получить из параметров в URL, который я передаю при изменении состояния в угловому (щ маршрутизатор):Получить URL из параметров Экспресс API от Angular UI-маршрутизатор

.state('contact.detail', { 
    url: '/:contactId', 
    templateUrl: 'detail.html', 
    controller: 'DetailController' 
}) 

В курьерским Я определим API, но проблема заключается в получении параметра из URL-адреса, который я передал из ui router (выше).

server.js

var express = require('express'); 
var mysql = require('mysql'); 
var url = require('url'); 

var app = express(); 

app.use('/', express.static('../app')); 
app.use('/bower_components', express.static('../bower_components/')); 

var server = require('http').createServer(app); 

var bodyParser = require('body-parser'); 
app.jsonParser = bodyParser.json(); 
app.urlencodedParser = bodyParser.urlencoded({ extended: true }); 

//mysql connection setup 
var connection = mysql.createConnection({ 
    host : "localhost", 
    port: "3306", 
    user : "root", 
    password : "", 
    database : "db", 
    multipleStatements: true 
}); 

app.get('/:id', app.urlencodedParser, function(req,res){ 

    var id = req.params.id; 

    console.log(id); // => :id instead of value 

    connection.query('SELECT * FROM contacts WHERE contactId = ?', [id], function (error, results) {   
     if(error) { 
      throw error; 
     } 
     else { 
      res.end(JSON.stringify(results)); 
     } 
    }); 
}); 

server.listen(3000, function() { 
    'use strict'; 
}); 

В журнале я получаю ": идентификатор" вместо реальной стоимости, например, "".

я могу получить доступ к API вручную

enter image description here

принять Пожалуйста, посмотрите на plunker для состояний деталей.

ответ

0

Поскольку u использует ui-router (или ngRoute), это маршрутизация на стороне клиента, если вы хотите позвонить по маршруту с вашего сервера, вам нужно сделать http-вызов с помощью службы $ http (или $ resource) как:

//this is a example not tested. 
.controller('DetailController', function($scope, $stateParams,$http){ 
    console.log('Passed parameter contact id is:', $stateParams.contactId); 

    $scope.selectedContactId = $stateParams.contactId; 
    $http.get("localhost:3000/"+$stateParams.contactId) 
     .success(function(data){ 
       //console.log(data) 
     }) 
     .error(function(error,status){ 

     }) 
    }); 
+0

Благодаря cshion, я не упомянул, что у меня есть HTTP позвонить с $ HTTP службы, и это выглядит следующим образом '$ http.get. ('/: идентификатор') успеха (функция (данные) { data.forEach (функция (строка, индекс) { $ scope.myData.push (данные); }); $ scope.gridOptions.data = данные; }) 'Когда я жестко переменный идентификатор в server.js до «45» (например), данные точно отображается на интерфейсе. Проблема заключается в получении этого значения (45) в API (server.js), когда я нажимаю (изменение состояния) на интерфейсе. – corry

+1

вы передаете StateParams.contactId на вызов $ http, что-то вроде .. $ http.get (''/"" + $ stateParams.contactId). ? – cshion

Смежные вопросы