我正在使用NodeJS和ExpressJS建立一个区块链客户端-服务器网络。我让服务器成功运行,并且区块链本身运行正常。但是我在结合两者时遇到了一些问题。首先,这是我的项目结构:
node_p2p/
node_modules/
...
public/
block.js
client.js
index.html
package-lock.json
package.json
server.js
我遇到的实际问题是,我想在block.js
文件中包含client.js
,但总是在行中得到ReferenceError: require is not defined
,在其中包含block.js
放入client.js
:
var block = require('./block.js');
我已经尝试了以下变体,但是它们都会产生相同的错误(相当不错,因为require目录与调用require的文件有关,但是我还是尝试了它们,以防万一)。
var block = require('../public/block.js');
var block = require('../public/block');
var block = require('./public/block.js');
var block = require('./public/block');
var block = require('/public/block.js');
var block = require('/public/block');
var block = require('../block.js');
var block = require('../block');
var block = require('./block.js');
var block = require('./block');
var block = require('block.js');
var block = require('block');
这是block.js
的代码:
const SHA256 = require ('crypto-js/sha256');
class Block{
constructor(...){...}
...
}
class Blockhain{
constructor(...){...}
...
}
module.exports = {
Blockchain: function(){
return new Blockchain();
}
}
第二,client.js
:
var socket = io.connect('http://localhost:3000');
var block = require('./block.js');
socket.on('client', showData);
socket.on('clientno', showData);
socket.on('newclient', showData);
function showData(data) {
console.log(data);
}
var nascoin = new block.Blockchain();
最后,server.js
:
var express = require('express');
var app = express();
var server = app.listen(3000);
app.use(express.static('public'));
console.log("server running!");
var socket = require('socket.io');
var io = socket(server);
io.sockets.on('connection', newConnection);
var client_counter = 0;
function newConnection(socket) {
console.log('new conn: ' + socket.id);
client_counter++;
socket.emit('client', 'your client name: ' + socket.id);
socket.emit('clientno', 'you are client no.: ' + client_counter);
socket.broadcast.emit('newclient', 'new client has joined the fray');
socket.on('server', function(data) {
console.log(data);
});
}
我什至不知道我还能做些什么,要么我就是那个笨蛋,要么那个瞎子...
答案 0 :(得分:1)
您收到的错误
ReferenceError:未定义require
与您尝试加载的实际模块无关。这意味着功能require
根本不可用,就像您要调用任何未定义的旧功能一样。
> require('./pkdxfjdghbdhfksdh')
Error: Cannot find module './pkdxfjdghbdhfksdh'
如果require
找不到模块,您将得到(在Node中)。
您究竟如何运行此代码?如果您实际上是在Node中运行它,例如node client.js
,不应发生此错误。如果您尝试在浏览器中运行内容,则将需要诸如Webpack或Parcel之类的捆绑程序。
答案 1 :(得分:0)
看来,您只是在浏览器中使用client.js
,它附加到index.html
上。我建议您将client.js
代码与任何捆绑程序捆绑在一起,例如webpack
。它将启用与浏览器兼容的代码,您可以在index.html
中使用该代码。
浏览器尚未require
内置实现。