Javascript &引用;TypeError:undefined不是函数;使用Express在node.js中需要jQuery ui时

Javascript &引用;TypeError:undefined不是函数;使用Express在node.js中需要jQuery ui时,javascript,jquery,node.js,jquery-ui,Javascript,Jquery,Node.js,Jquery Ui,我正在尝试设置一个小型的node.jswebserver,它将使用jQuery和jqueryui。我使用Express设置了一个小项目,然后使用npm install--save安装了我需要的所有软件包。请记住,我是JavaScript世界的新手,所以我可能会做一些愚蠢的事情,但我找不到任何人有同样的问题(只是相关) Express将项目设置为: $ ls app.js bin node_modules npm-debug.log package.json public routes

我正在尝试设置一个小型的
node.js
webserver,它将使用
jQuery
jqueryui
。我使用
Express
设置了一个小项目,然后使用
npm install--save安装了我需要的所有软件包。请记住,我是JavaScript世界的新手,所以我可能会做一些愚蠢的事情,但我找不到任何人有同样的问题(只是相关)

Express
将项目设置为:

$ ls
app.js  bin  node_modules  npm-debug.log  package.json  public  routes  views
$ cat app.js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var jQuery = require('jquery');
var jQueryUi = require('jquery-ui');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();
// The rest is omitted here for brevity. Default settings from Express.
var jQuery = require('jquery');

/*! jQuery UI - v1.10.3 - 2013-05-03
* http://jqueryui.com
* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.effect.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js, jquery.ui.menu.js, jquery.ui.position.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js
* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
(function( $, undefined ) {

var uuid = 0,
    runiqueId = /^ui-id-\d+$/;

// $.ui might exist from components with no dependencies, e.g., $.ui.position
$.ui = $.ui || {};

$.extend( $.ui, {
    version: "1.10.3",

    keyCode: {
        BACKSPACE: 8,
        COMMA: 188,
        DELETE: 46,
        DOWN: 40,
// Lots of other defines...
})( jQuery ); // End of block on line 316
{
  "name": "QAWebApp3",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "^1.12.3",
    "cookie-parser": "^1.3.4",
    "debug": "^2.1.3",
    "express": "^4.12.3",
    "jade": "^1.9.2",
    "jquery": "^2.1.3",
    "jquery-ui": "^1.10.5",
    "morgan": "^1.5.2",
    "serve-favicon": "^2.2.0"
  }
}
文件夹
node\u modules
现在包含:

$ ls node_modules
body-parser  cookie-parser  debug  express  jade  jquery  jquery-ui  morgan  serve-favicon
我的
app.js
文件是由
Express
设置的,只是我现在包括
jQuery
jQuery ui
,如下所示:

$ ls
app.js  bin  node_modules  npm-debug.log  package.json  public  routes  views
$ cat app.js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var jQuery = require('jquery');
var jQueryUi = require('jquery-ui');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();
// The rest is omitted here for brevity. Default settings from Express.
var jQuery = require('jquery');

/*! jQuery UI - v1.10.3 - 2013-05-03
* http://jqueryui.com
* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.effect.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js, jquery.ui.menu.js, jquery.ui.position.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js
* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
(function( $, undefined ) {

var uuid = 0,
    runiqueId = /^ui-id-\d+$/;

// $.ui might exist from components with no dependencies, e.g., $.ui.position
$.ui = $.ui || {};

$.extend( $.ui, {
    version: "1.10.3",

    keyCode: {
        BACKSPACE: 8,
        COMMA: 188,
        DELETE: 46,
        DOWN: 40,
// Lots of other defines...
})( jQuery ); // End of block on line 316
{
  "name": "QAWebApp3",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "^1.12.3",
    "cookie-parser": "^1.3.4",
    "debug": "^2.1.3",
    "express": "^4.12.3",
    "jade": "^1.9.2",
    "jquery": "^2.1.3",
    "jquery-ui": "^1.10.5",
    "morgan": "^1.5.2",
    "serve-favicon": "^2.2.0"
  }
}
现在运行
节点bin/www
会显示错误

/home/oystein/QAWebApp3/node_modules/jquery-ui/jquery-ui.js:15
$.extend( $.ui, {
  ^
TypeError: undefined is not a function
    at /home/oystein/QAWebApp3/node_modules/jquery-ui/jquery-ui.js:15:3
    at Object.<anonymous> (/home/oystein/QAWebApp3/node_modules/jquery-ui/jquery-ui.js:316:3)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/home/oystein/QAWebApp3/app.js:8:16)
    at Module._compile (module.js:460:26)
我猜是一些包容问题。错误出现在第15行,
$.extend($.ui,{
),但消息告诉我查看该行
(函数($,未定义){
。解决此问题的最佳方法是什么

哦,
package.json
看起来像这样:

$ ls
app.js  bin  node_modules  npm-debug.log  package.json  public  routes  views
$ cat app.js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var jQuery = require('jquery');
var jQueryUi = require('jquery-ui');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();
// The rest is omitted here for brevity. Default settings from Express.
var jQuery = require('jquery');

/*! jQuery UI - v1.10.3 - 2013-05-03
* http://jqueryui.com
* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.effect.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js, jquery.ui.menu.js, jquery.ui.position.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js
* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
(function( $, undefined ) {

var uuid = 0,
    runiqueId = /^ui-id-\d+$/;

// $.ui might exist from components with no dependencies, e.g., $.ui.position
$.ui = $.ui || {};

$.extend( $.ui, {
    version: "1.10.3",

    keyCode: {
        BACKSPACE: 8,
        COMMA: 188,
        DELETE: 46,
        DOWN: 40,
// Lots of other defines...
})( jQuery ); // End of block on line 316
{
  "name": "QAWebApp3",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "^1.12.3",
    "cookie-parser": "^1.3.4",
    "debug": "^2.1.3",
    "express": "^4.12.3",
    "jade": "^1.9.2",
    "jquery": "^2.1.3",
    "jquery-ui": "^1.10.5",
    "morgan": "^1.5.2",
    "serve-favicon": "^2.2.0"
  }
}

jQuery和jQuery UI用于前端,不希望与没有DOM的节点一起使用。如果要使用任何包含类似功能的帮助器jQuery函数,可以使用它们

如果希望创建一些HTML UI供express服务器返回,则应在模板文件(jade文件)中定义/包括这两个库(jQuery和jQuery UI)(使用标记)


希望这有助于

在客户端上使用,jQuery和jQuery UI文件应该作为服务器上的静态文件使用,并且Express有一个
静态
中间件,您可以使用它定义一个目录来查找其中的静态文件

这些文件可以从jQuery站点下载,也可以使用客户端软件包管理器(如Bower)进行管理,因为
npm
中的jQuery UI使用的是浏览器不支持的
require

您还可以使用托管的jQuery文件,这样就不需要在服务器上安装它


然后,应将
标记添加到html(或Jade)中文件来加载和使用它们。

你为什么尝试在服务器端使用jQuery?我以前没有见过它这样使用,我猜它使用
npm
require
来提供给browserify或其他常见的浏览器环境。我想创建一个小网页来访问和更改服务器上的数据库r、 这应该包括一些UI、下拉列表、选项卡等,以插入和删除数据。这不是正确的设置方式吗?再说一遍,我对这个世界还不熟悉,所以这种设置可能根本不可行。在这种情况下,您应该将jQuery和jQuery UI作为静态文件提供,并将它们包含在带有
标记的HTML中。我对它们不太熟悉但我肯定它也有一个静态文件服务器。