首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询、url和体参数在seneca中与seneca没有正确合并。

查询、url和体参数在seneca中与seneca没有正确合并。
EN

Stack Overflow用户
提问于 2016-11-04 12:25:44
回答 1查看 526关注 0票数 0

我和seneca和seneca有麻烦了。我真的是个初学者。

到目前为止,这是我的代码:

代码语言:javascript
复制
"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);
});

下面是定义seneca操作的代码:

代码语言:javascript
复制
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处理程序中(路由/products/fetch/byId/id_of_the products)。

到目前为止,代码可以工作,但是我希望得到由id_of_the产品表示的id变量,而不是var id = req.args.params.id;但是我希望它合并到req对象中,我想要做var id = req.id;

在ADD处理程序中,我做了var args = req.args.body;但是我希望看到主体合并到req对象中,就像我在David的“在node.js中开发微服务”一书中看到的那样。

在处理程序中,当我要调用传递产品id的另一个seneca操作时,就会出现问题。在这种情况下,id对req对象可用,而不是在url参数中。当然,我可以测试变量是否在req.args.params中定义,如果没有使用req对象中的变量,但它不是一个干净的解决方案。

这是否可能与当前版本的seneca和seneca网站?我已经从国家预防机制安装了他们,我有这些版本: seneca 3.2.2和Seneca-Web2.0.0;

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 08:01:30

您应该整理出您感兴趣的信息,验证它的有效性,并使用该信息调用底层操作。在访问您的实际服务之前,role:web可以是用户输入的一般健全检查的良好守护者。

请记住,用户可以传递任何内容,如路由参数、主体、查询字符串等,您必须注意清理用户提供的信息,并且只将有效信息发送到底层操作中。

代码语言:javascript
复制
seneca.add('role:web,domain:product,action:getById', function (msg, done) {
  const id = parseInt(msg.args.params.id, 10)
  if (isNaN(id)) {
    return done(new Error('needs to be numeric'))
  }
  seneca.act('role:entity,domain:product,action:getById', {id}, done)
})

seneca.add('role:entity,domain:product,action:getById', function (msg, done) {
  this.make$('product').load$(msg.id, done)
})

msg.args检索有关请求的信息是seneca-web中游戏的名称--这是获取该信息的唯一途径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40422635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档