Here is my code: http://pastebin.com/rZKRTGUB
I am not sure why I am getting require is not defined on Line 4
require is part of the node runtime environment and does not exist in browsers. It looks like you're trying to run this in the browser (in the <script> tags). Likely, you should be creating a server in node and then using the code you've written to talk to the database.
Yours is client side code, so require() is obviously not defined.
You either move your code in a node server or you drop http://requirejs.org/docs/download.html in your script if you want to use that API in the browser.
Related
I have some pure JS code and HTML and CSS on my localhost:8000 server. I have installed node.js and I am able to use it without problem testing it on the VS code terminal. However, I want to integrate the file reading mechanic of node.js into the code that I am running on the localhost:8000 server. I want to put this node.js code into my webpage on localhost:8000
const {readFileSync, promises: fsPromises} = require('fs');
function syncReadFile(filename) {
const contents = readFileSync(filename, 'utf-8');
const arr = contents.split(/\r?\n/);
console.log(arr); // 👉️ ['One', 'Two', 'Three', 'Four']
return arr;
}
syncReadFile('./locations.txt');
I have tried copy and pasting it into the js file for the webpage, however when I run it, the console says
Uncaught ReferenceError: require is not defined
at window.onload (index.js:23:46)
index.js:23:46 is the line where const {readFileSync, promises: fsPromises} = require('fs'); is.
How do I fix this?
I think you need a better understanding of how NodeJS works:
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
A JavaScript runtime is (in this context) a program that runs in a machine, with tools to interact with that machine. In development, the context of that machine is the context of a Server.
Now, JavaScript found it's use in the HTML script tag, that's the most "vanilla" way to execute JS in it's home, what it's most used for. In this context, JavaScript is running as a Client.
What makes NodeJS, different from executing the same code in an HTML file you can already execute without installing NodeJS?
It's as vanilla as you can get after you "force" JavaScript to be executed in the Backend, but for it to be used as a webserver, there are some tools that need to be ported, converted or even created, some of these tools, like the File System (fs) are specific to NodeJS.
That's it! TLDR is that your code won't work because it's being executed in the wrong place. You can fix that in many ways, like this one, but maybe you can find a better path understanding how NodeJS works
Browsers cannot access file systems like that. Nodefs will not work within the browser
The NodeJS modules only works on the server side, you can't use it client side (that also include the require() syntax).
If you want to read a file from the server, you might want to use an AJAX directed to the route that has a controller to read the targeted file, which then the result of the AJAX is handled client side with vanilla JS.
I have a C++ application which has to execute a Javascript-function from a dynamic file. (I need to read a proxy.pac file).
E.g. I have a C++ application running which reads the following file: proxy.pac (which contains the javascript function FindProxyForURL(url, host), which I have to call with the two parameters.
However, I have no idea how to start off and I can't find anything on the internet so far.
So basically my question is: how doe I load dynamic Javascript from a file and execute a function within that code(/file)
I made application server using TinyJS.
see this.
https://github.com/pochi0701/wizdlive
I have a bit of a weird situation that I will try to explain the best I can.
I am using Python to launch photoshop and run a javascript file. But my goal is for python to generate the javascript first, then run it in photoshop.
In order to do that I have python copying the javascript file, then replacing a single line of code and running this new copy.
When I run the original javascript file it works as intended with no problems.
When I run the copied javascript file it works as intended with no problems.
When I run the copied javascript file that has the line replaced, it gives me an 8800 error.
At this point, even if I manually type the replaced line to match the original javascript file. I will still get an 8800 error.
Does python somehow write files differently?
Here is the code I am using to replace the copy and replace the javascript contents:
from shutil import copyfile
jsx_file = r'E:\PS\_javascript_constructor_template.jsx'
jsx_file_new = r'E:\PS\_javascript_constructor_template_new.jsx'
copyfile(jsx_file, jsx_file_new)
with open(jsx_file_new, "r") as fin:
data = fin.read()
with open(jsx_file_new, "w") as fout:
fout.write(data.replace("!REPLACEME!",'"E:\PS\MockVar.csv"'))
Any ideas?
SIDE NOTE: I am only doing this because I have no idea how to pass an argument from python into the javascript file I am subprocess calling.
I would much rather send an argument to the javascript file than build new files enitrely.
If you'd rather send an argument to the Photoshop script, I'd recommend using interprocess communication. You can use the socket module in Python and the Socket object in Extendscript to send messages back and forth. Check out External Communications Tools in the Adobe Tools Guide for more information.
I have a Node.js server hosted in Azure
Developers should be able to write JavaScript satisfying an API and upload it to my MongoDB hosted somewhere else.
My Node.js server now gets triggered and picks the right logic from the MongoDB.
How can I execute this Code dynamically the best way?
Use Eval? Or can I load the file in MainMemory and execute it?
The loaded code must be able to access other methods running on the Server (the ones documented in the API for the developer)
Basically, you are right, we can leverage eval() to execute the javascript code from string, if you need to access to the local scope. You can refer to https://nodejs.org/api/vm.html#vm_vm_runinthiscontext_code_options for the detailed explanation.
Here is my test file in MongoDB:
{
"id": "123",
"code": "someFuc()"
}
And test code snippet in Node.js:
function someFuc(){
console.log("this is consoled from node.js application");
}
...
// file results query from db
...
var code = results[0].code;
console.log(code);
eval(code);
I found a pretty neat solution:
transform the JavaScript syntax to "Node.js" syntax
write the module with the fs-library to a file
"require" the created file to a variable
execute the logic of the variable
delete the file afterwards
--> you can now debug the code unlike with using "eval"
I am creating an HTML file for use with OpenWrt LuCI web interface. As discussed here: http://luci.subsignal.org/trac/wiki/Documentation/Templates I am using the Lua Markup language to run a Lua function called runDiag and I need to pass the javascript variable option to the runDiag function. I can't figure out how to make this work. I have tried various modifications to the markup inside the displayDiag function without success.
Can anyone help?
Example:
<%-
function runDiag(option)
return option
end
-%>
<script>
function displayDiag() {
var option = document.getElementById('iface').value;
document.getElementById('diag_text').innerHTML = '<%- write (runDiag(option)) -%>';
}
</script>
You can't do this. The Lua template is ran on the server, and the JavaScript code is ran on the client (i.e. web browser). They can't communicate.
The Lua code simply generates an HTML file to send to the client. It doesn't know about JavaScript; it's just some text that it's giving to the client. Here, option refers to a nonexistant Lua variable, which has the value of nil.
Conversely, the JavaScript code has no knowledge of the server-side Lua code. It just gets whatever the server generated. Thus, it only sees this line:
document.getElementById('diag_text').innerHTML = 'nil';
To communicate with the web server, you will need use AJAX or some other protocol.