电子的NodeJS与快递
我尝试使用电子(为网站和桌面应用程序),使web应用和表达(用于会议等)电子的NodeJS与快递
现在,我得到这个作为我app.js:
const express = require('express');
const {app, BrowserWindow} = require('electron');
exp = express();
exp.set('views', __dirname + '/views/');
exp.use(express.static(process.cwd() + '/views'));
exp.get('/', function(req, res) {
res.render('index', {});
});
function onAppReady()
{
mainWindow = new BrowserWindow({
width: 1080,
height: 720,
autoHideMenuBar: true,
useContentSize: true,
resizable: false
});
mainWindow.loadURL('http://localhost:5000/');
mainWindow.focus();
mainWindow.webContents.openDevTools();
}
app.on('ready', onAppReady);
现在,有几个问题:
-
如果我使用
node app.js
,我得到这个错误: 行:app.on('ready', onAppReady);
TypeError:无法读取Object上未定义的 属性'on'。 (module.js:571:32) at Object.Module._extensions..js(module.js:580:10)(/home/josh/chat_program/client/app.js:26:4) at Module._compile )在Module.load(module.js:488:32) at try.ModuleLoad(module.js:447:12) at Function.Module._load(module.js:439:3) at Module.runMain(module的.js:605:10) 在运行(bootstrap_node.js:420:7)在启动时 (bootstrap_node.js:139:9) 在bootstrap_node.js:535:3
如果我使用
electron .
,应用程序启动,但我没有得到请求或网页。我所得到的只是基本的HTML,没有任何东西(只有DOCTYPE HTML HEAD和BODY)。
我搜索了很长时间,但找不到任何东西。
两件事。
首先我想澄清你的寻路设置和使用,更是这样的:
var publicPath = path.resolve(__dirname, '/views');
// point for static assets
app.use(express.static(publicPath));
//view engine setup
app.set('views', path.join(__dirname, '/views/'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
其次,我想包我所有的快件代码到一个单一的文件,该文件是一个自动执行的功能,所以它运行一次当你需要它。比如我的快递文件,我打电话给我的app.js
文件:
(function() {
'use strict';
var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes.js');
var app = express();
var publicPath = path.resolve(__dirname, '../dist');
var port = 3000;
// point for static assets
app.use(express.static(publicPath));
//view engine setup
app.set('views', path.join(__dirname, '../dist'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended:true
}));
app.use('/', routes);
app.use(cookieParser());
var server = app.listen(port, function() {
console.log('Express server listening on port ' + server.address().port);
});
module.exports = app;
}());
然后在我的主文件(我称之为main.js
不app.js,在我的情况),我实例化应用程序和Express服务器,如下所示:因此,可能需要
var app = require('electron').app;
var Window = require('electron').BrowserWindow; // jshint ignore:line
var Tray = require('electron').Tray; // jshint ignore:line
var Menu = require('electron').Menu; // jshint ignore:line
var fs = require('fs');
var server = require('./ServerSide/app');
var mainWindow = null;
app.on('ready', function() {
'use strict';
var path = require('path');
var iconPath = path.resolve(__dirname, './dist/myicon.ico');
const appIcon = new Tray(iconPath);
mainWindow = new Window({
width: 1280,
height: 1024,
autoHideMenuBar: false,
useContentSize: true,
resizable: true,
icon: iconPath
// 'node-integration': false // otherwise various client-side things may break
});
appIcon.setToolTip('My Cool App');
mainWindow.loadURL('http://localhost:3000/');
// remove this for production
var template = [
{
label: 'View',
submenu: [
{
label: 'Reload',
accelerator: 'CmdOrCtrl+R',
click: function(item, focusedWindow) {
if (focusedWindow) {
focusedWindow.reload();
}
}
},
{
label: 'Toggle Full Screen',
accelerator: (function() {
if (process.platform === 'darwin') {
return 'Ctrl+Command+F';
} else {
return 'F11';
}
})(),
click: function(item, focusedWindow) {
if (focusedWindow) {
focusedWindow.setFullScreen(!focusedWindow.isFullScreen());
}
}
},
{
label: 'Toggle Developer Tools',
accelerator: (function() {
if (process.platform === 'darwin') {
return 'Alt+Command+I';
} else {
return 'Ctrl+Shift+I';
}
})(),
click: function(item, focusedWindow) {
if (focusedWindow) {
focusedWindow.toggleDevTools();
}
}
},
]
}
];
var menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
mainWindow.focus();
});
// shut down all parts to app after windows all closed.
app.on('window-all-closed', function() {
'use strict';
app.quit();
});
请注意,我用这与在Windows平台上的成功,小的调整在这个例子中列出的任何平台的具体项目。
你需要分开你后端和前端部分 – MysterX
mmh你的例子在这里工作没有问题...(电子) –
是的,它的工作原理,但它没有给我一个请求。 –