静态服务JS文件,包括具有Express的Node应用程序中的Node Module,以及客户端与服务器端编程

时间:2018-10-07 01:49:34

标签: node.js express require node-modules cloudinary

我在Web开发领域还很陌生,在Express应用程序中需要某些节点模块时遇到了问题。我需要访问某些代码,但是我对Node的复杂性感到困难,并且无法一生都在需要的地方访问node_modules。

我要尝试的是利用已安装的node_modules中的Cloudinary视频播放器。我已经在htmlRoutes.js提供的index.html文件中包含了路径链接,并且我明确指示了express以静态方式将这些文件加载​​到文档中,但是应用程序无法将这些路径识别为有效。我试过要求这些模块位于从公共文件夹提供的单独JS文件中,但这也是无效的。据我了解,这可能是我自己对客户端编程与服务器端编程的困惑,但是我不知道如何解决此问题,也不知道我应该阅读哪些资源才能做到这一点。

任何帮助将不胜感激。这是我的服务器的外观:

const express = require("express");
const path = require('path');
const bodyParser = require('body-parser');
const baguetteBox = require('baguettebox.js');
const cloudinary = require('cloudinary');
const axios = require("axios");

const app = express();

// Define a port to listen for incoming requests

// Sets an initial port. We"ll use this later in our listener
const PORT = process.env.PORT || 8181;

app.use(express.static('public'));
//static routes that attempts to fetch scripts from node_modules without revealing inner directory structure
app.use(express.static(__dirname + '/node_modules/lodash'));
app.use(express.static(__dirname + '/node_modules/cloudinary'));
app.use(express.static(__dirname + '/node_modules/cloudinary-core'));
app.use(express.static(__dirname + '/node_modules/cloudinary-video-player'));


// Sets up the Express app to handle data parsing
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

//routes
require("./routes/htmlRoutes.js")(app);
// require("./routes/apiRoutes.js")(app);

  //configure cloudinary api calls
// cloudinary.config({
//   cloud_name: 'name',
//   api_key: 'key',
//   api_secret: 'secret',
//   secure: true
// })

// Start our server so that it can begin listening to client requests.
app.listen(PORT, function() {

  // Log (server-side) when our server has started
  console.log("App listening on: http://localhost:" + PORT);
});

2 个答案:

答案 0 :(得分:0)

我从来没有见过将node_modules包直接用作静态文件,尽管如此,我对这种工作方式一无所知。

处理此问题的另一种方法是使用捆绑器(例如Webpack)并将其与Express.js一起提供

这样做的原因是,即使是JavaScript,Webpack也会将代码编译为浏览器可以解释的内容,在许多情况下,您在Node.js包中找不到这些内容

答案 1 :(得分:0)

例如,如果需要lodash,则不必访问node_modules / lodash。只需通过声明即可导入lodash:

const lodash = require('lodash');

现在您可以在声明lodash的文件中使用lodash。