是否可以从节点 js 中的同一模块导出构造函数和一些普通函数?
Is It possible to export constructor function and some normal function from same module in node js?
我的应用结构:
| my-application
| -- app.js
| -- node_modules
| -- public
| -- models
| -- users.js
| -- routes
| -- index.js
| -- views
| -- index.ejs
users.js
function User(name){
this.name = name;
}
User.prototype.getName = function () {
return this.name;
};
exports.checkName = function (name) {
if(name === 'johnSnow'){
return true;
}
return false;
};
module.exports = User;
我试试这个:
index.js
var user = require('../models/users');
if( user.checkName('dinar') === true ){
var User = new user('name');
console.log(User.getName());
}
TypeError: user.checkName is not a function
是否可以使用同一模块中的函数和构造函数?
有什么办法吗?
我是 node js 的新手。
提前致谢。
对于这种类型的实施,您通常会这样做:
在user.js
function User(name){
this.name = name;
}
User.prototype.getName = function () {
return this.name;
};
module.exports = {
User: User,
checkName: function(name) {
return (name === 'johnSnow');
}
};
然后在index.js
var users = require('../models/users');
if (users.checkName('dinar')) {
var user = new users.User('name');
console.log(user.getName());
}
是的,可以通过将普通函数作为 "static" 方法放在构造函数本身上。在您的尝试中,您用 User
覆盖了 exports
对象,因此 checkName
丢失了。相反,做
function User(name){
this.name = name;
}
User.prototype.getName = function () {
return this.name;
};
User.checkName = function (name) { /*
^^^^ */
return name === 'johnSnow';
};
module.exports = User;
或者你可能想写
module.exports = User;
module.exports.checkName = function (name) {
return name === 'johnSnow';
};
很有可能,我会这样做。对我来说,我总是把属于一个对象的函数写成嵌套函数,我发现它在概念上更容易,也更合乎逻辑。您会看到 addSquares 是一个辅助方法,它不属于由构造函数生成的 Square 对象。
文件A:
var exports = module.exports();
exports.Square = Square;
exports.addSquares = addSquares;
function Square(width, height){
this.width = width;
this.height = height;
this.area = function(){
return this.width * this.height;
}
}
function addSquares(sq1, sq2){
return sq1.getArea() + sq2.getArea();
}
文件B
var Square = require('fileA');
var mySquare = new Square.Square(10,50);
var yourSquare = new Square.Square(50,50);
var area2 = Square.addSquares(mySquare, yourSquare);
我的应用结构:
| my-application
| -- app.js
| -- node_modules
| -- public
| -- models
| -- users.js
| -- routes
| -- index.js
| -- views
| -- index.ejs
users.js
function User(name){
this.name = name;
}
User.prototype.getName = function () {
return this.name;
};
exports.checkName = function (name) {
if(name === 'johnSnow'){
return true;
}
return false;
};
module.exports = User;
我试试这个:
index.js
var user = require('../models/users');
if( user.checkName('dinar') === true ){
var User = new user('name');
console.log(User.getName());
}
TypeError: user.checkName is not a function
是否可以使用同一模块中的函数和构造函数?
有什么办法吗?
我是 node js 的新手。
提前致谢。
对于这种类型的实施,您通常会这样做:
在user.js
function User(name){
this.name = name;
}
User.prototype.getName = function () {
return this.name;
};
module.exports = {
User: User,
checkName: function(name) {
return (name === 'johnSnow');
}
};
然后在index.js
var users = require('../models/users');
if (users.checkName('dinar')) {
var user = new users.User('name');
console.log(user.getName());
}
是的,可以通过将普通函数作为 "static" 方法放在构造函数本身上。在您的尝试中,您用 User
覆盖了 exports
对象,因此 checkName
丢失了。相反,做
function User(name){
this.name = name;
}
User.prototype.getName = function () {
return this.name;
};
User.checkName = function (name) { /*
^^^^ */
return name === 'johnSnow';
};
module.exports = User;
或者你可能想写
module.exports = User;
module.exports.checkName = function (name) {
return name === 'johnSnow';
};
很有可能,我会这样做。对我来说,我总是把属于一个对象的函数写成嵌套函数,我发现它在概念上更容易,也更合乎逻辑。您会看到 addSquares 是一个辅助方法,它不属于由构造函数生成的 Square 对象。
文件A:
var exports = module.exports();
exports.Square = Square;
exports.addSquares = addSquares;
function Square(width, height){
this.width = width;
this.height = height;
this.area = function(){
return this.width * this.height;
}
}
function addSquares(sq1, sq2){
return sq1.getArea() + sq2.getArea();
}
文件B
var Square = require('fileA');
var mySquare = new Square.Square(10,50);
var yourSquare = new Square.Square(50,50);
var area2 = Square.addSquares(mySquare, yourSquare);