Javascript mean.io$save()未找到返回的404文件
我使用的是mean.io,遇到了一个我不理解的数据库集合问题。我有两个类似的列表,它们工作得很好。当我尝试将一个项目添加到物料列表时,服务器端会给出404响应,我不知道为什么 所以。。。让我从一点代码转储开始 下面是模型文件条目Javascript mean.io$save()未找到返回的404文件,javascript,angularjs,node.js,mongoose,mean.io,Javascript,Angularjs,Node.js,Mongoose,Mean.io,我使用的是mean.io,遇到了一个我不理解的数据库集合问题。我有两个类似的列表,它们工作得很好。当我尝试将一个项目添加到物料列表时,服务器端会给出404响应,我不知道为什么 所以。。。让我从一点代码转储开始 下面是模型文件条目 var UnitSchema = new Schema({ unit: { type: String, required: true }}); 而且 var MaterialSchema = new Schema({ name: { type:
var UnitSchema = new Schema({
unit: {
type: String,
required: true
}});
而且
var MaterialSchema = new Schema({
name: {
type: String,
required: true
},
unit: {
type: mongoose.Schema.ObjectId,
ref: 'Unit'
},
delivery_offset: {
type: String,
required: true
}});
所以我有两个基本的答案。一个是单元,另一个是包含对单元集合的引用的材质。
这是材质的管线文件
module.exports = function(Materials, app, auth, database) {
//Setting up the materials api
app.get('/materials', auth.requiresAdmin, materials.all);
app.post('/materials', auth.requiresAdmin, materials.create);
app.get('/materials/:materialId', auth.requiresAdmin, materials.show);
app.put('/materials/:materialId', auth.requiresAdmin, materials.update);
app.delete('/materials/:materialId', auth.requiresAdmin, materials.destroy);
app.param('materialId', materials.material);
};
我想下一个逻辑条目是服务器端控制器的create函数
exports.create = function(req, res, next, id) {
var material = new Material(req.body);
material.save(function(err) {
if (err) {
return res.status(500).json({
error: 'Cannot save the material of measure'
});
}
res.json(material);
});
};
这就是服务器端的内容。现在是客户端。在我发布之前,我确实有一个PUT操作的服务设置,但这是一个发布,所以…就是这样。这是客户端控制器。
加载网页时会调用第一个代码段。它基本上设置了$scope变量和ngTable
$scope.init = function() {
Materials.query({}, function(materials) {
$scope.materials = materials;
$scope.units = Units.query();
var data = materials;
$scope.tableMaterialsParams = new NGTableParams({
page: 1,
count: 10
},{
total: data.length,
getData: function($defer, params) {
params.total(data.length);
var orderedData = params.sorting()?$filter('orderBy')(data, params.orderBy()):data;
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
});
};
下一个代码段是客户端控制器中的add函数,当用户希望向列表中添加新材质时,会调用该函数
$scope.addMaterial = function() {
if (!$scope.materials) $scope.materials = [];
var material = new Materials({
name: $scope.name,
unit: $scope.unit._id,
delivery_offset: $scope.delivery_offset
});
material.$save(function(response) {
$scope.materials.push(response);
var data = $scope.materials;
$scope.tableMaterialsParams.total(data.length);
$scope.tableMaterialsParams.reload();
});
this.name = this.unit = this.delivery_offset = '';
};
我使用ngTable作为前端显示,因此您会看到一些对tableBlahBlah的调用。保存后,它用于更新和刷新表。这是表单的html
<form id="material-add-form" class="form-group" name="addMaterialForm" data-ng-submit="addMaterial()">
<div class="row">
<span class="col-sm-5">
<input type="text" data-ng-model="name" placeholder="Material Name" class="form-control m-b"/>
</span>
<span class="col-sm-2">
<select ng-model="unit" class="form-control m-b"
ng-options="obj.unit for obj in units track by obj._id">
<option value="" disabled selected>Unit of Measure</option>
</select>
</span>
<span class="col-sm-2">
<select data-ng-model="delivery_offset" class="form-control m-b">
<option value="" disabled selected>Delivery Offset</option>
<option value="Two Days Prior">Two Days Prior</option>
<option value="One Day Prior">One Day Prior</option>
<option value="Same Day">Same Day</option>
</select>
</span>
<button class="btn btn-primary " type="submit">
<i class="fa fa-check"></i>
Add
</button>
</div>
</form>
计量单位
交货抵销
两天前
一天前
当天
添加
任何关于我做错了什么的帮助或想法都将不胜感激。正如我之前所说的,我还有其他工作刚刚找到的非常相似的列表 找到了问题的答案。我认为这是我的一个错误。只是不知道具体在哪里。它位于服务器端控制器中
exports.create = function(req, res, next, id)
我对堆栈开发还比较陌生,所以我不确定为什么这是错误的。我将函数定义更改为
exports.create = function(req, res, next)
而且它有效
我的实现还有第二个问题。这是没有问题的,因为我从来没有能够让它与404错误工作,所以我从来没有看到它。当我将材质项保存到数据库时,单元(ObjectId)将不会填充。它将是空白的。我将save()调用更改为
material.save(function(err) {
if (err) {
return res.json(500, {
error: 'Cannot save the material'
});
} else {
material.populate({
path: 'unit',
select: 'unit'
}, function(err, doc) {
res.json(doc);
});
}
});
现在它按预期工作。生成的数据库条目如下所示
{“_id”:ObjectId(“5524547488842d6cb408c003”),“名称”:“测试”,“单元”:ObjectId(“550f7047e9cc68da538fe46f”),“交货补偿”:“当天”}
我能够找到并解决问题,但我有点不清楚它为什么起作用。对不起……shouda还提供了有关问题的更多详细信息。当我尝试添加时,我在浏览器中得到一个POST 404(未找到)响应。我在调试模式下使用gulp和node,它也在解析器中吐出POST/aterials 404。如果我在浏览器中打开,我会得到一个很好的响应,其中包含了我收集的资料中的数据。