【问题标题】:Angular $resource not passing parameter to Express serviceAngular $resource 未将参数传递给 Express 服务
【发布时间】:2016-11-20 22:05:55
【问题描述】:

我有一个 Angular 应用程序,它需要能够从 MongoDB 集合中获取构造数据。我正在使用 flConstruct 中的 $resource 服务从服务器请求数据。 “查询”调用返回所有数据并且似乎工作正常。当我尝试使用“get”仅检索其中一个构造的数据时,不会返回任何数据。

我已打印到控制台以查看访问服务的内容,但我没有看到 findOne 函数可用的参数。下面是控制台的输出

Get - constructs.getConstructById
constructData.id undefined
req.params._id undefined
req.query._id undefined
No Error - Construct Data Retrieved
Get - constructs.getConstructs (Id) - No Error
Returned - construct null
Get - constructs.getConstructs (Id) - Sending Back question
Get - constructs.getConstructs (Id) - Sending Back neither error nor question

//命名的Angular服务,flConstruct

angular.module('app').factory('flConstruct',function($resource){
var ConstructResource = $resource('/api/constructs/:id', {id: "@id"}, {
    get: { method: 'GET', url: '/api/constructs/byId/:id', params: {id: "@id"}},
    query: { method: 'GET' , url: '/api/constructs', isArray: true },
    create: { method: 'POST'},
    update: { method: 'PUT' },
    delete: { method: 'DELETE', params: {id: '@id'}}
});

return ConstructResource;
});

//Express配置文件命名为routes.js

var constructs = require('../controllers/constructs'),

module.exports = function(app){


app.get('/api/constructs', constructs.getConstructs);
app.get('/api/constructs/byId', constructs.getConstructById);

app.post('/api/constructs', constructs.createConstruct);
app.put('/api/constructs', constructs.updateConstruct);
app.delete('/api/constructs/:id', constructs.deleteConstruct);
});
}

// 表示控制器命名,construct.js

var Construct = require('mongoose').model('Construct');

exports.getConstructs = function(req,res){
var constructData = req.body;
console.log("Get - constructs.getConstructs");
console.log("constructData.id " + constructData.id);
console.log("constructData " + constructData);
console.log("req.params.id " + req.params.id);
console.log("req.query.id " + req.query.id);
Construct.find({}).exec(function(err,collection){
    if (err){
        console.log("Error - No Construct Retrieved");
    }else
    {
        console.log("No Error - Construct Data Retrieved");
    }
    //console.log(collection);
    res.send(collection);
})
};

exports.getConstructById = function(req,res) {
console.log("Get - constructs.getConstructById")
var constructData = req.body;
console.log("constructData.id " + constructData.constructId);;
console.log("req.params._id " + req.params._id)
console.log("req.query._id " + req.query._id)
Construct.findOne({_id:req.params.id}).exec(function(err,construct){
if (err){
    console.log("Error - No Construct Retrieved");
    console.log("Get - constructs.getConstructs (Id) - Error");
    res.send(null);
}else
{
    console.log("No Error - Construct Data Retrieved");
    console.log("Get - constructs.getConstructs (Id) - No Error");
    //console.log("Returned - construct._id " + construct._id)
    //console.log("Returned - construct.id " + construct.id)
    console.log("Returned - construct " + construct)
    console.log("Get - constructs.getConstructs (Id) - Sending Back question");
    res.send(construct);
}
console.log("Get - constructs.getConstructs (Id) - Sending Back neither error nor     question");
})

};

【问题讨论】:

  • 你在哪里调用 findOne 函数并将参数传递给它?
  • 哦,等等,我想我在这里看到了Construct.findOne({_id:req.params.id}).exec()
  • 您的 getConstructById 方法正在请求正文中查找 constructId,但您的 GET 请求将 ID 指定为路径变量。此外,GET 请求没有请求正文
  • 我修复了 findOne 调用。我想我现在说对了。我仍然无法将参数传递给函数。您能否提供更多详细信息。以下是我所做的更改:exports.getConstructById = function(constructId,res) { console.log("Get -constructs.getConstructById"); Construct.findOne({_id:constructId }),(function(err,construct){
  • 我已将问题隔离到 Angular 代码。如果我在 flConstruct.js 函数的 get 中对 id 进行硬编码,一切正常。问题是参数没有被传递到 flConstruct.js 的 get 中。我无法理解为什么?

标签: javascript angularjs api express angular-resource


【解决方案1】:

我发现了我的错误。这一切都在 Angular 代码中。在 flCachedConstruct.js 中对 get 的调用未正确定义要传递的参数。我需要包含参数名称“id”以及参数值constructID。此函数调用中的“id”与我在 flConstruct.js 中调用的参数匹配。

flConstruct.get({id: constructId }, function(data) {

【讨论】:

    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多