My Node.js文件夹hirarchy看起来像下一张图片:
虽然app.js
是Node.js主文件,routes
是Node.js路由,src
是客户端公共html文件。
这是app.js中的代码:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
global.io = require('socket.io').listen(server);
var compression = require('compression');
var helmet = require('helmet');
var session = require('express-session');
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.use(express.static(__dirname + '/src'));
app.use(helmet());
app.use(compression());
app.use('/rides', require('./routes/ridesServer'));
app.use('/user', require('./routes/userServer'));
app.use('/offers', require('./routes/offersServer'));
app.use('/notifications', require('./routes/notificationsServer'));
server.listen("8080", function() {
console.log("Connected to db and listening on port 8080");
});
这是routes/userServer.js
文件中的另一个API:
router.post('/verifytoken', function(req, res, next) {
// some functions here
});
这是我在客户端进行的另一个HTTP请求,在页面中:ride.js
:
$.ajax({
method: "POST",
headers: {
"Content-Type": "application/json"
},
url: "user/verifytoken",
data: JSON.stringify(something),
success: function(response) {
// some code
},
error: function(error) {
// some code
}
});
如您所见,客户端文件和Node.js服务器文件位于同一服务器上,Node.js通过此命令提供这些静态文件:
app.use(express.static(__dirname + '/src'));
我认为应该避免,并且有更好的方法!
如果您是Node.js专家和最佳实践家庭,请告诉我下一个工作方法是否正确,如果没有,请纠正我:
我考虑过在public_html
目录下放置静态文件
和server
目录下的{。{}}目录下的Node.js文件。
然后在public_html
目录中的app.js上运行pm2 start app.js --watch
或node app.js
,而不是server
。
结果,public_html
文件将作为另一个静态文件提供,与Node.js服务器没有任何关系,Node.js将在自己的文件夹中,不处理任何类型的客户端
换句话说,分离Node.js和静态文件,并将Node.js文件作为子目录而不是主目录。
然后HTTP REQUEST将如下所示:
index.html
请注意我添加了 SERVER 目录。 此外,我可以交换
$.ajax({
method: "POST",
headers: {
"Content-Type": "application/json"
},
url: "server/user/verifytoken",
data: JSON.stringify(something),
success: function(response) {
// some code
},
error: function(error) {
// some code
}
});
来自远程应用程序的IP(如Ionic):
url: "server/user/verifytoken",
然后我的HTTP REQUESTS将通过HTTPS提供(因为我发送的是端口443),我可以在同一台服务器上创建多个应用程序,而且我没有与任何Node.js表达静态文件夹的斗争。
您怎么看?
谢谢!
答案 0 :(得分:1)
首先让我说我不是专家。但我有3年不断开发基于Node.js的解决方案。
过去我创建了在同一个项目中混合客户端代码和服务器端代码的解决方案,并且它有效。至少有一段时间了。但从长远来看,出于许多可能的原因,这是一个坏主意。其中一些是:
我们目前在工作中所做的工作如下:
以这种方式分离代码可以轻松开发每个部分并快速演变。但它可能会带来一些复杂性:
其他一些考虑因素是:
https
模块的节点上),但请注意,在所有情况下,您需要在API服务器前面的另一个actor(代理对实际API服务器的请求的网站)实现交叉问题的API网关,如身份验证,速率限制等)。在过去,我提出了与您在此方案中使用SSL相关的问题,答案是here。我的答案是:取决于部署条件。