javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

JavaScript-未捕获的错误:找不到模块“ jquery”

我正在使用Electron制作桌面应用程序。 在我的应用程序中,我正在加载一个外部站点(Atom应用程序外部),例如说[http://mydummysite/index.html]页面。

这是我在Atom Editor中应用程序的结构:

enter image description here

即它具有以下部分:

  1. npm rebuild
  2. npm rebuild
  3. npm rebuild(加载jquery)

源代码:

main.js:

   'use strict';

    var app = require('app');

    app.on('ready', function() {
      var BrowserWindow = require('browser-window');

      var win = 
      new BrowserWindow({ width: 800, height: 600, show: false, 
               'node-integration':true });
      win.on('closed', function() {
        win = null;
      });

      win.loadUrl('http://mydummysite/index.html ');
      win.show();
    });

package.json:

{
  "name": "my-mac-app",
  "version": "5.2.0",
  "description": "My Mac Desktop App",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "author": "Me",
  "license": "ISC",
  "dependencies": {
    "jquery": "^2.1.4"
  }
}

外部页面-[http://mydummysite/index.html]页面代码:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <h1>Hello World!</h1>

  </body>
<script>

   var jqr=require('jquery');

</script>
</html>

当我运行上述应用程序(通过将应用程序文件夹拖到Electron上)时,外部页面([http://mydummysite/index.html)]加载到Electron Shell中但是有错误

未捕获的错误:找不到模块'jquery'

enter image description here

您能帮我找到这个问题的原因吗?

如您在目录结构的屏幕快照中所见,我已经将jquery模块安装到了我的文件夹中,并通过npm rebuild命令完成了此操作。

注意:要在JS中使用npm rebuild命令,我尝试在我的外部页面[http://mydummysite/index.html]页面中添加npm install jquery,但该按钮正在运行,因此require("jquery")可能是原因。

我是否在Electron中以正确的方式添加了外部模块(jquery)?

我是否在npm rebuild中缺少某些依赖关系?

我已经尝试过的:

  • npm rebuildnpm install jquery(到我的应用文件夹)
  • npm rebuild
  • npm rebuild
  • npm rebuild
  • require("ipc")
  • require("ipc")
  • require("ipc")

这是在require("ipc")中引发错误的位置的屏幕截图

enter image description here

有人可以建议为什么require("ipc")可以工作而require("jquery")不能工作吗?

我的目标是将jQuery与具有真实节点集成的电子应用程序一起使用。

trans by 2020-01-12T15:19:36Z

javascript-Passport.js身份验证失败时发送回JSON响应

我将Node.js用作iPhone客户端的后端API服务器。 我正在使用Passport.jslocal strategy进行身份验证。相关代码如下:

// This is in user.js, my user model
UserSchema.static('authenticate', function(username, password, callback) {
    this.findOne({ username: username }, function(err, user) {
        if (err){
            console.log('findOne error occurred');
            return callback(err);
        }
        if (!user){
            return callback(null, false);
        }
        user.verifyPassword(password, function(err, passwordCorrect){
            if (err){
                console.log('verifyPassword error occurred');
                return callback(err);
            }
            if (!passwordCorrect){
                console.log('Wrong password');
                return callback(err, false);
            }
            console.log('User Found, returning user');
            return callback(null, user);
        });
    });
});

// This is in app.js
app.get('/loginfail', function(req, res){
    res.json(403, {message: 'Invalid username/password'});
});

app.post('/login',
    passport.authenticate('local', { failureRedirect: '/loginfail', failureFlash: false }),
    function(req, res) {
       res.redirect('/');
});

现在,我已经设法将失败的登录重定向到/ loginfail,在那里我将一些JSON发送回iPhone客户端。 但是,这没有足够的粒度。 我希望能够将适当的错误发送回iPhone客户端,例如:“找不到用户”或“密码错误”。 使用我现有的代码,我看不到如何实现。

我试图按照示例进行操作,以完成passport.js网站上的自定义回调,但是由于缺乏节点理解,我无法使其正常工作。 如何修改代码,以便能够发送带有适当错误代码/消息的res.json?

编辑:我现在正在尝试这样的事情:

// In app.js
app.post('/login', function(req, res, next) {
    passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err) }
        if (!user) {
            console.log(info);
            // *** Display message without using flash option
            // re-render the login form with a message
            return res.redirect('/login');
        }
        console.log('got user');
        return res.json(200, {user_id: user._id});
    })(req, res, next);
});

// In user.js
UserSchema.static('authenticate', function(username, password, callback) {
    this.findOne({ username: username }, function(err, user) {
        if (err){
            console.log('findOne error occurred');
            return callback(err);
        }
        if (!user){
            return callback(null, false);
        }
        user.verifyPassword(password, function(err, passwordCorrect){
            if (err){
                return callback(err);
            }
            if (!passwordCorrect){
                return callback(err, false, {message: 'bad password'});
            }
            console.log('User Found, returning user');
            return callback(null, user);
        });
    });
});

但是当我尝试使用console.log(info)时,它只是说未定义。 我不知道如何使此自定义回调工作...任何帮助将不胜感激!

trans by 2020-01-12T12:13:07Z

使用Node.js同步数据库查询

我有一个Node.js / Express应用程序,该应用程序查询路由内的MySQL数据库并将结果显示给用户。 我的问题是如何在将用户重定向到他们请求的页面之前运行查询并阻止直到两个查询都完成?

在我的示例中,我有2个查询需要在呈现页面之前完成。 如果我将查询2嵌套在查询1的“结果”回调中,则可以使查询同步运行。但是,当查询数量增加时,这将变得非常复杂。

如何在不将后续查询嵌套在先前查询的“结果”回调中的情况下同步运行多个(在本例中为2个)数据库查询?

我已经查看了Node模块中的“流控制/异步好东西”,并尝试了flow-js,但我无法使其与异步查询一起使用。

下面列出的是我尝试从“ / home”路由执行的2个查询。 Node专家能否解释做到这一点的“正确”方法。

app.get('/home', function (req,res) {
    var user_array = [];
    var title_array = [];

    // first query
    var sql = 'select user_name from users';
    db.execute(sql)
        .addListener('row', function(r) {
            user_array.push( { user_name: r.user_name } );
        })
        .addListener('result', function(r) {
            req.session.user_array = user_array;
        });

    // second query
    var sql = 'select title from code_samples';
    db.execute(sql)
        .addListener('row', function(r) {
            title_array.push( { title: r.title } );
        })
        .addListener('result', function(r) {
            req.session.title_array = title_array;
        });

        // because the queries are async no data is returned to the user
        res.render('home.ejs', {layout: false, locals: { user_name: user_array, title: title_array }});
});
trans by 2020-01-12T02:33:56Z

Windows-无法将“节点”识别为内部或外部命令

我一直在使用2698639482580108108 2698639482580108108289(已在Windows Vista上本地安装2698639482580108108290)进行工作。我最近升级到了v0.6.6291(通过运行安装程序)。它似乎工作了一段时间,但现在如果我尝试从任何目录运行2698639482580580108292 我得到一个

无法将“节点”识别为内部或外部命令

消息,尽管从node运行node确实起作用。

我尝试重新启动,删除节点,重新安装,重新安装0.6.3-似乎没有任何效果。 我只是不明白为什么2698639482580580108288无法识别系统路径,尽管node从其基本目录工作?

trans by 2020-01-12T00:32:46Z

表单-如何从nodejs / express向浏览器发送成功状态?

我在nodeJS / Expressjs服务器中编写了以下代码:

app.post('/settings', function(req, res){
    var myData = {
        a: req.param('a')
        ,b: req.param('b')
        ,c: req.param('c')
        ,d: req.param('d')
    }

    var outputFilename = 'config.json';

    fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
        if(err) {
          console.log(err);
        } else {
          console.log("Config file as been overwriten");
        }
    }); 
});

这使我可以获取提交的表单数据并将其写入JSON文件。

这很完美。 但是客户端仍然处于某种发布状态,并最终超时。 因此,我需要将某种成功状态或成功标头发送回客户端。

我应该怎么做?

先感谢您!

trans by 2020-01-11T20:09:03Z

没有定义电子require()

我正在为自己的目的创建一个Electron应用程序。 我的问题是,当我在HTML页面中使用节点函数时,它引发以下错误:

未定义'require()'。

有没有办法在我所有的HTML页面中使用Node功能? 如果可以的话,请给我举个例子,或者提供一个链接。 以下是我要在HTML页面中尝试使用的变量:

  var app = require('electron').remote; 
  var dialog = app.dialog;
  var fs = require('fs');

这些是我在Electron的所有HTML窗口中使用的值。

trans by 2020-01-11T16:17:44Z

zip-在Node.js跨平台中下载和解压缩文件的最简单方法?

只是寻找一种简单的解决方案,以在任何操作系统上的Node.js中下载2697552399027027405824或2697552399027405405文件并将其解压缩。

不知道这是内置的,还是我必须使用单独的库。 有任何想法吗? 只需寻找几行代码,以便当我想在节点中下载下一个zip文件时,就可以了。 这样的感觉应该很容易和/或内置,但是我什么也找不到。 谢谢!

trans by 2020-01-11T06:32:42Z

node.js-无法使用Express.js更改Favicon

这是一个非常基本的问题,但是我正在尝试使用以下方法更改node.js / Express应用程序的图标

app.use(express.favicon(__dirname + '/public/images/favicon.ico'));

而且我仍在使用默认图标。 这是在我的{ maxAge: 2592000000 }函数中,是的,我已经验证了/public/images/favicon.ico中是否有favicon.ico.在控制台中也没有关于favicon.ico的任何信息,这使我相信这行代码已被忽略。 函数中的其他所有内容(设置端口,设置视图目录,设置模板引擎等)似乎都正常,那么为什么这行代码无法执行?

我尝试了什么

  • 清空浏览器缓存
  • 重新启动终端并再次运行{ maxAge: 2592000000 }
  • 如此处所述,添加{ maxAge: 2592000000 }

提前致谢。

更新:我知道了。 有关更多信息,请参见下面的答案。

trans by 2020-01-11T02:00:34Z

node.js-Express.js在MEAN堆栈中做什么?

我最近进入了AngularJS,我喜欢它。 对于即将进行的项目,我希望使用MEAN堆栈(MongoDB,Express,Angular,Node)。 我对Angular非常熟悉,并且对堆栈中MongoDB和Node的用途有一定的了解。 但是,我不太了解Express.js的目的是什么。 这对MEAN堆栈至关重要吗? 您将其与传统的MySQL,PHP,javascript应用程序进行比较吗? 其他三个组件不能做什么?

另外,如果有人想对堆栈的四个部分如何协同工作提出自己的看法,那就太好了。

trans by 2020-01-10T23:51:55Z

javascript-如何在express.js应用程序中检测环境?

如何检测expressJS应用程序在什么环境中运行? (开发,测试,生产?)。 process.env中没有任何内容指示环境...

我知道您可以在每种环境下的配置文件中声明变量,但这对动态加载模块没有帮助...

trans by 2020-01-10T16:06:29Z

node.js-节点-如何运行app.js?

我是Node.js的新手,我尝试通过在终端node app.js中使用命令来运行一个项目(由其他开发人员制作)。但是我遇到以下错误,您是否知道如何运行此项目?

我在这里遵循了一些说明来运行项目。

错误日志如下:

Junryls-Mac-mini:app junrylmaraviles$ node app.js

/Users/junrylmaraviles/Desktop/myfolder/mysubfolder/app/app.js:1
(function (exports, require, module, __filename, __dirname) { define('src/app'
                                                              ^
ReferenceError: define is not defined
    at Object.<anonymous> (/Users/junrylmaraviles/Desktop/myfolder/mysubfolder/app/app.js:1:63)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3
trans by 2020-01-10T07:16:53Z

如何在node.js中“需要”后删除模块?

可以说,在我需要一个模块并执行以下操作之后:

var b = require('./b.js');
--- do something with b ---

然后我想拿走模块b(即清理缓存)。 我该怎么办?

原因是我想动态加载/删除或更新模块,而无需重新启动节点服务器。 任何想法?

- - - - 更多 - - - - 根据删除require.cache的建议,它仍然不起作用...

what I did are few things:
1) delete require.cache[require.resolve('./b.js')];
2) loop for every require.cache's children and remove any child who is b.js
3) delete b

但是,当我呼叫b时,它仍然存在! 它仍然可以访问。 除非我这样做:

b = {};

不知道这是否是处理该问题的好方法。因为如果以后再修改b.js,我又需要('./b.js')。 它需要旧的缓存b.js(我尝试删除)还是新的?

-----------更多发现--------------

好。 我做了更多的测试,并尝试使用代码。.这是我发现的:

1) delete require.cache[]  is essential.  Only if it is deleted, 
 then the next time I load a new b.js will take effect.
2) looping through require.cache[] and delete any entry in the 
 children with the full filename of b.js doesn't take any effect.  i.e.
u can delete or leave it.  However, I'm unsure if there is any side
effect.  I think it is a good idea to keep it clean and delete it if
there is no performance impact.
3) of course, assign b={} doesn't really necessary, but i think it is 
 useful to also keep it clean.
trans by 2020-01-10T07:09:43Z

部署-使用Monit代替基本的Upstart设置是否有好处?

我正在配置服务器以将node.js作为守护程序运行。 我已经设置了Upstart来处理节点的启动和关闭,这很棒。 下一步是确保node.js死后重新启动。 一些指南建议使用Monit(或Fugue)来监视进程(在Monit的情况下,通过对服务器执行HTTP请求并等待响应)。

我很高兴使用Monit或Fugue之类的工具,但是我不确定为什么不(或不能)仅使用Upstart的重生功能。 我假设Upstart将监视已启动进程的PID,并在进程死后再次启动它。 Monit或Fugue给您Upstart没有的什么?

trans by 2020-01-10T02:21:00Z

node.js-yarn.lock和npm的shrinkwrap有什么区别?

最近,我尝试使用Yarn安装Node软件包。 它运作良好,并且比NPM快很多。 纱线会自动生成yarn.lock。我们已经有NPM收缩包装(npm-shrinkwrap.json)。

它们之间有什么区别吗?yarn.lock是否比npm-shrinkwrap.json有任何优势?

trans by 2020-01-09T18:40:11Z

node.js-如何查看软件包历史记录?

如何在Npm注册表中查看软件包的历史记录?

我特别想知道[https://npmjs.org/package/npm] 1.1.2版本何时发布。

trans by 2020-01-09T15:22:48Z

Node.js“致命错误:JS分配失败-进程内存不足”-可能获得堆栈跟踪?

好吧...我回到正题。 我无法一生解决这个问题。

我收到以下错误:

FATAL ERROR: JS Allocation failed - process out of memory

我可以列举出数十种(是的,数十种)我试图找出这个问题根源的东西,但实际上这太过分了。 所以这是关键点:

  • 我只能在生产服务器上实现它,而且我的应用程序又大又复杂,因此事实证明很难隔离它
  • 即使堆大小和RSS大小均小于200 Mb,也会发生这种情况,考虑到机器(Amazon Cloud,CentOS,m1.large)具有8Gb RAM,这应该不是问题。

我的假设是(由于第二点),泄漏可能不是原因。 相反,似乎可能有一个非常大的SINGLE对象。 以下线程支持这一理论:在Node.js中,使用JSON.stringify会导致“进程内存不足”错误

我真正需要的是某种方法来找出应用程序崩溃时内存的状态,或者可能是导致致命错误的堆栈跟踪。

根据我上面的假设,只有10分钟的堆转储是不够的(因为该对象不会驻留在内存中)。

trans by 2020-01-09T03:11:07Z

javascript-如何忽略文件uglify

背景

大约30分钟前,我才开始使用grunt。 所以,请忍受我。

但是我有一个相当简单的脚本,它将查看我的js,然后将其全部压缩到一个文件中。

"use strict";
module.exports = function (grunt) {

    // load all grunt tasks
    require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        uglify: {
            options: {
                beautify: true,
                report: 'gzip'
            },
            build: {
                src: ['docroot/js/*.js', 'docroot/components/pages/*.js', 'docroot/components/plugins/*.js'],
                dest: 'docroot/js/main.min.js'
            }
        },
        watch: {
            options: {
                dateFormat: function(time) {
                    grunt.log.writeln('The watch finished in ' + time + 'ms at' + (new Date()).toString());
                    grunt.log.writeln('Waiting for more changes...');
                }
            },
            js: {
                files: '<%= uglify.build.src %>',
                tasks: ['uglify']
            }
        }
    });

    grunt.registerTask('default', 'watch');

}

我的main.min.js每次都包含在编译中。 这意味着我的min.js正在获得2x,4x,8x,16x等。围绕此的最佳方法是添加一个异常并忽略main.min.js吗?

trans by 2020-01-08T23:28:26Z

node.js-如何在JavaScript中生成MD5文件哈希?

如何为该代码编写functionToGenerateMD5hash? 我已经有fileVideo,我需要通过单击按钮将相应的md5哈希发送到服务器。

$("#someButton").click(function() {
var fr = new FileReader();      
fr.onload = function(e) {            
    string md5 = functionToGenerateMD5hash(e.target.result);
    // send md5 here
};       
fr.readAsArrayBuffer(fileVideo);
trans by 2020-01-08T15:32:08Z

node.js-检查猫鼬连接状态而不创建新连接

我有一些测试-即超级测试-可以加载我的Express应用。 这个程序创建一个猫鼬的连接。 我想知道如何从测试中检查该连接的状态。

在app.js中

mongoose.connect(...)

在test.js中

console.log(mongoose.connection.readyState);

如何访问app.js连接? 如果我在test.js中使用相同的参数进行连接,会创建新连接还是寻找现有连接?

trans by 2020-01-08T04:33:35Z

javascript-在新的Promise()构造函数中使用async / await是一种反模式吗?

我正在使用myFunction函数来一次控制最大操作数。

const { eachLimit } = require("async");

function myFunction() {
 return new Promise(async (resolve, reject) => {
   eachLimit((await getAsyncArray), 500, (item, callback) => {
     // do other things that use native promises.
   }, (error) => {
     if (error) return reject(error);
     // resolve here passing the next value.
   });
 });
}

如您所见,我无法将myFunction函数声明为异步函数,因为我无权访问eachLimit函数的第二个回调函数中的值。

trans by 2020-01-07T14:10:14Z