流星服务器无需登录即可插入数据

meteor server insert data without login

本文关键字:插入 数据 登录 服务器 流星      更新时间:2023-09-26

我想创建允许其他应用程序插入(创建)新数据的API。但到目前为止,我尝试过,这不是工作与错误消息"用户id是必需的",我知道,发生因为没有登录用户发现插入新数据时。是否有可能插入新的数据没有登录或任何可能的方式从服务器端登录,如果使用帐户密码的包或任何可能的方式使此工作?

服务器代码

Picker.route('/createFood/:title', function(params, req, res, next) {
console.log('-> params : ',params);
let username = (new Date()).getTime().toString();
function createFood() {
  Fiber(function() {
    console.log("-> username : ",username);
    let acc = Accounts.createUser({
      username: username,
      email: username +'@foodie.com',
      password: username
    });  
  if (acc) {
      console.log("-> acc : ",acc);
      // Meteor.call("setUserId", acc);
      Menus.insert({
        title: params.title,
      }, function(err, foodId) {
        console.log("-> abs : ",Meteor.absoluteUrl());
        console.log("-> err : ",err.message);
        console.log("-> foodId : ",foodId);
        let code, result;
        if (err) {
          code = 500;
          result = {
            error: err.message
          }
        } else {
          code = 200;
          result = {
            foodId: foodId,
          }
        }
        res.setHeader( 'Content-Type', 'application/json' );
        res.statusCode = code;
        res.end( JSON.stringify( result ) );
      })
    }
  }).run();
}
if (params.title)
  createFood(); 
});

code food model,这里有userId owner

if (Meteor.isServer) {
Menus.allow({
  insert: function() {
    return true;
  },
  update: function() {
    return true;
  },
  remove: function() {
    return true;
  },
  fetch: ['foodId'],
});
Menus.after.insert((userId, doc) => {
 ....
})
}

没有理由不登录就不能插入数据库。如果你不愿意,甚至可以不包含accounts包。

除非用户在场,否则当前代码不会插入,您可以将其简化为:

function createFood() {
      Menus.insert({
        title: params.title,