我有一些像这样的代码:
// GET: api/Users/abcde12345
[HttpGet("{nameIdentifier:nameId}")]
[Authorize]
public async Task<IActionResult> GetUserByNameIdentifier([FromRoute] string nameIdentifier)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
User user = await _context.User.SingleOrDefaultAsync(m => m.NameIdentifier == nameIdentifier);
if (user == null)
return NotFound();
return Ok(user);
}
我的second.js看起来像这样:
//app.js
var r=require("./second.js");
var a=1;
r.second(a);
console.log(a);
目前console.log(a)只显示1,我做了一些研究,说我不能将它作为变量传递,因为变量作为值传递。我想过使用global.a。但是,它也不起作用,因为a存储为模块变量,而不是全局变量,我不想将其设置为全局变量。
我该如何解决?
答案 0 :(得分:3)
主要答案是你不能完全按照你的要求去做。在app.js中定义为a
的变量是a
范围内的私有,只有app.js中的其他代码可以修改它。
您可以通过许多其他方式来构建模块,以便模块B可以修改模块A中的某些内容,或者在模块A中修改某些内容。
您可以a
全局。出于各种原因,不建议这样做。但是您可以通过将a
的声明更改为:
global.a = 1;
然后,在模块B中,您可以直接设置:
global.a = 2;
您可以将a
传递给模块B中的函数,并让该函数返回一个新值,并将其分配回a
。
const b = require('moduleB');
let a = 1;
a = b.someFunction(a);
console.log(a); // 2
然后,在moduleB内部,您可以直接修改a
上的属性:
// inside of moduleB
module.exports.someFunction = function(a) {
return ++a;
};
您可以将其存储为对象的属性,然后将引用传递给该对象,而不是将值存储在简单变量中。 Javascript中的对象由ptr传递,因此您传递对象的其他一些函数可以直接修改其属性。
const b = require('moduleB');
let a = {someProperty: 1};
b.someFunction(a);
console.log(a.someProperty); // 2
然后,在moduleB内部,您可以直接修改a
上的属性:
// inside of moduleB
module.exports.someFunction = function(obj) {
obj.someProperty = 2;
};
答案 1 :(得分:1)
最初,没有任何名为second
的函数。您的模块公开了一个名为change
的函数。然后,当您将值传递给函数时,将复制此值,并且您执行的任何更改仅影响副本。因此传递a
的值时,更改仅影响此值的副本,而不影响原始值的副本。你能做的是传递一个物体。这次传递了对象引用的副本。因此,您所做的任何更改都会反映回原始对象(它就像C和C ++中的指针一样)。
就代码而言,您应该做出以下更改:
// You could make the method more dynamical passing the value you want a get.
module.exports.change = function(obj, value){
obj.a = value;
}
最后你应该把它称为:
var r=require("./second.js");
var obj = { a: 1};
r.change(obj,2);
console.log(obj.a);
答案 2 :(得分:0)
第一种方式将在change
的{{1}}函数中返回。
app.js:
second.js
second.js:
var r=require("./second.js");
var a=1;
a = r.change(a);
console.log(a);
第二种方式是使用object作为参数来通过引用传递它:
app.js:
module.exports.change=function(a){
a=2;
return a;
}
second.js:
var r=require("./second.js");
var obj={a:1};
r.change(obj);
console.log(obj.a);
答案 3 :(得分:0)
您可以使用localStorage或sessionStorage来设置和获取变量。 对于节点js,您可以使用https://www.npmjs.com/package/localStorage包
tntwars
您可以使用localStorage.getItem('key')
//You can set using localStorage.setItem('key','value')
var r = require("./second.js");
var a = 1;
localStorage.setItem('a', 1) /*Window api for setting variable locally
localStorage.setItem('key','value')*/
r.second(a);
console.log(a);