从公用文件夹中的脚本在index.js中运行功能

时间:2019-08-20 16:17:28

标签: javascript node.js express

我正在尝试从公用文件夹中的脚本在index.js主文件中运行脚本。我不知道如何链接两者。

我正在尝试执行此操作,因为我需要在服务器端运行文件系统操作。我试图在主HTML文件中链接脚本,但是当我尝试运行该函数时,找不到它。

我的索引文件:

const express = require('express');
const bodyParser = require('body-parser');
var fs = require("fs");

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use(express.static('public'));

app.get('/', (req, res) => {
  res.sendFile('public/index.html');
});

app.listen(3000, () => console.log('server started'));

function test() {
  console.log("test");
}

我在公用文件夹中的脚本只有test();

我的链接HTML

 <script src="script.js"></script>
 <script src="../index.js"></script>

我希望测试功能能够运行,并记录“ test”。它没有,并且我没有控制台日志或错误。

所有代码都可用on repl.it

4 个答案:

答案 0 :(得分:1)

人们说Node.JS的最佳功能是能够在客户端和服务器上使用相同的代码。但是, 并不简单。

您不能只将代码包含在公用文件夹之外的HTML中。如果要在服务器端调用函数,则需要执行以下操作:

app.get('/test', (req, res) => {
  test() // will log on the server side
  res.send("All ok!");
});

并在客户端这样请求:

fetch('/test').then(res => {
  console.log('got result from server!')
})

本质上,您不能仅在服务器端调用函数-您必须通过HTTP与服务器通信。您可以 做的是创建一个包含实用程序功能的共享文件夹,您可以在客户端和服务器上都包含这些实用程序功能,但是除非您使用了捆绑程序(例如,作为WebPack /汇总)。

答案 1 :(得分:0)

您对客户端Java脚本和服务器端节点js文件感到困惑。 index.js是服务器端节点js文件。它具有明确的链接,并且现在可以像节点index.js一样运行,如果您想在节点js应用程序中使用Java脚本功能,则可以使用此示例。

http://techslides.com/client-side-javascript-to-node-js 剩下的这一行不能用于nodejs服务器端js文件。

答案 2 :(得分:0)

除非已将功能设置为通过端点调用,否则无法在浏览器中运行的另一个脚本中的服务器脚本中运行该功能。服务器脚本和浏览器脚本不在同一系统中运行,因此它们没有共享相同的执行上下文来以纯方式彼此调用函数。

在这里,您将服务器功能设置为能够从另一个系统调用。

app.get('/runtest', (req, res) => {
  test();
  rest.status(200).send('Ok');
});

现在,您可以通过ajax从浏览器脚本中调用它。

答案 3 :(得分:0)

您无法在服务器端index.js的公用文件夹中运行脚本。因为index.js是在服务器中运行的脚本。该脚本不能包含在客户端(网络浏览器)中运行的public文件夹中的脚本中。要在公用文件夹中运行script.js,可以在服务器上创建一个名为scirpt.js的新文件。

Script.js

module.exports = function test () {
  // do some stuff
};

并导入index.js。

Index.js

const express = require('express');
const bodyParser = require('body-parser');
// import test function from script.js file in here
const test = require('./script.js');
var fs = require("fs");

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use(express.static('public'));

app.get('/', (req, res) => {
  res.sendFile('public/index.html');
});

app.listen(3000, () => console.log('server started'));

// using it in here
test();

const test = require('./script.js');用于从script.js文件导入function test,并在最后一行test()中使用它。