繁体   English   中英

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

[英]Run function in index.js from script in public folder

我正在尝试从公用文件夹中的脚本在主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>

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

所有代码都可以在repl.it上找到

人们说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 / RollUp),否则它们在编写时都不会引用节点模块。

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

http://techslides.com/client-side-javascript-to-node-js其余部分不能用于nodejs服务器端js文件。

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

这是设置服务器功能以使其能够从另一个系统调用的方法。

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

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

您无法在服务器端的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()使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM