我遇到了seneca和seneca-web的麻煩。我真的是一個初學者。查詢,網址和身體參數沒有在seneca與seneca-web正確合併
這是到目前爲止我的代碼:
"use strict";
var express = require('express');
var Web = require("seneca-web");
var bodyParser = require('body-parser')
var plugin = require('./products_actions/products_actions');
module.exports = plugin;
var entities = require('seneca-entity')
var seneca = require('seneca')();
seneca.use(plugin);
seneca.use(entities);
seneca.use('mysql-store', {
name : 'ecrm',
host : 'localhost',
user : 'root',
password : 'ecrm',
port : 3306
})
seneca.ready(function(err) {
var Routes = [ {
pin : 'area:product,action:fetch,criteria:*',
prefix : '/products/fetch',
map : {
byId : {
GET : true,
suffix : "/:id"
}
}
}, {
pin : 'area:product,action:*',
prefix : '/products',
map : {
fetch : {
GET : true
},
add : {
GET : false,
PUT : true
}
}
} ];
var app = express();
app.use(bodyParser.json());
var config = {
routes : Routes,
adapter : require('seneca-web-adapter-express'),
context : app,
options : {
parseBody : false
}
}
seneca.use(Web, config);
app.listen(3000);
});
這裏就是被定義塞內卡行動代碼:
module.exports = function(options) {
var seneca = this;
// ADD
seneca.add({
area : "product",
action : "add"
}, function(req, done) {
var products = this.make$("prodotti");
var args = req.args.body;
console.log(args);
products.nome = args.nome;
products.categoria = args.categoria;
products.descrizione = args.descrizione;
products.prezzo = args.prezzo;
products.save$(function(err, product) {
done(err, products.data$(false));
});
});
// get by Id , PROBLEM!!!
seneca.add({
area : "product",
action : "fetch",
criteria : "byId"
}, function(req, done) {
console.log("HERE");
var id = req.args.params.id;
var product = this.make("prodotti");
product.load$(id, done);
});
// LIST ALL
seneca.add({
area : "product",
action : "fetch"
}, function(args, done) {
var products = this.make("prodotti");
products.list$({}, done);
});
}
的問題是在getbyId處理器(路由/產品/取/ byId/id_of_the product)。
到目前爲止的代碼工作,但我想獲得由id_of_the產品代表的id變量沒有做var id = req.args.params.id; 但我希望它合併在req對象中,我想做var id = req.id;
同樣在ADD處理程序中,我做了var args = req.args.body;但我希望看到正文在req對象中合併,正如我在David Gonzales的書 「開發node.js中的微服務」一書中看到的。
問題出現在處理程序中時,我想調用另一個通過產品ID的seneca動作。在這種情況下,ID可用於req對象,而不是在url參數中。 當然,我可以測試變量是否在req.args.params中定義,如果不使用req對象中的變量,但它不是一個乾淨的解決方案。
這是可能與當前版本的塞內卡和塞內卡網站?我已經從npm安裝它們,我有這些版本: seneca 3.2.2和seneca-web 2.0.0;
在此先感謝!
謝謝!我錯過了這個角色:在seneca-web中的web部分。 –