javascript

java

python

c#

android

c++

node.js

php

reactjs

jquery

html

css

ios

.net

git

ruby-on-rails

sql

c

string

ruby

如何在Node.js中最好地创建RESTful API

我是Node(以及所有后端Web开发)的初学者,并且我已经开始在Node中编写RESTful API。 我正在尝试做一些事情。

我的应用程序使用Express和Mongoose,并且正在使用express-resource模块轻松地为API资源创建CRUD路由。 但是有些事情我不满意,并且认为我可以做得更好。

第一个是猫鼬。 如果我想为我的API编写测试,则无法对Mongoose进行存根以使其强制进入内存数据。 但是,所有教程似乎都指向猫鼬,但我真的不确定应该使用什么。

其次,我的资源似乎有很多样板代码。 这真的是在Node.js中创建RESTful API的最佳方法吗? 还有其他模块可以帮助我创建CRUD路由吗? 我相信您可以直接从架构中创建CRUD路由,而无需任何代码,但是我真的不确定如何。

我已经看到了诸如Tower.js和CompoundJS(正式称为RailwayJS)之类的项目,这些项目似乎是解决这些问题的综合解决方案,远远超出了我的问题。 也许我应该使用它们,但是我真的只希望Node.js应用程序成为API,仅此而已。 我正在独立于API处理前端。

为了提供一些背景,这是我目前的情况。 目前,我在Mongoose中定义了一个模型:

var mongoose = require('mongoose')
  , Schema = mongoose.Schema
  , Link

var LinkSchema = new Schema({
  uri: String,
  meta: {
    title: String,
    desc: String
  },
  shares: [{
    uid: Schema.Types.ObjectId,
    date: Date,
    message: String
  }]
})

Link = module.exports = mongoose.model('Link')

接下来,我定义CRUD路由的控制器:

var mongoose = require('mongoose')
  , _ = require('underscore')
  , Link = mongoose.model('Link')

exports.load = function (req, id, fn) {
  Link.findById(req.params.link, function (err, link) {
    if (err) {
      return res.send(err)
    }

    fn(null, link)
  })
}

exports.index = function (req, res) {
  var filterByUser = req.query.user ? { 'shares.uid': req.query.user } : {}

  Link.find(filterByUser, function (err, links) {
    if (err) {
      return res.send(err)
    }

    res.send(links)
  })
}

exports.create = function (req, res) {
  var link = new Link(req.body)

  link.save(function (err) {
    if (err) {
      // TODO: send 404
      return res.send(err)
    }

    res.send(link)
  })
}

exports.show = function (req, res) {
  res.send(req.link)
}

exports.update = function (req, res) {
  req.link = _(req.link).extend(req.body)

  req.link.save(function (err, link) {
    if (err) {
      return res.send(err)
    }

    res.send(link)
  })
}

exports.patch = exports.update

exports.destroy = function (req, res) {
  req.link.remove(function (err) {
    if (err) {
      return res.send(err)
    }

    res.send()
  })
}

最后,我使用express-resource模块将这些控制器映射到Express应用顶部的必要CRUD路由。

app.resource('api/links', require('../resources/links'))
trans by 2020-07-13T12:52:45Z

安全-Node.js https pem错误:例程:PEM_read_bio:没有启动林

我现在用node.js弄乱了登录表单,我尝试使用创建pem密钥和csr

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

但是我在运行节点server.js时遇到错误

这是我的server.js

var http = require('http'),
    express = require('express'),
UserServer = require('./lib/user-server');

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('./key.pem', 'utf8'),
  cert: fs.readFileSync('./csr.pem', 'utf8')
};

var app = express();

app.configure(function(){
  app.use(express.bodyParser());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

var httpserver = http.createServer(app).listen('3004', '127.0.0.1');
var https_server = https.createServer(options, app).listen('3005', '127.0.0.1');
UserServer.listen(https_server);

这是错误

crypto.js:104
  if (options.cert) c.context.setCert(options.cert);
                          ^
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Object.exports.createCredentials (crypto.js:104:31)
    at Server (tls.js:1107:28)
    at new Server (https.js:35:14)
    at Object.exports.createServer (https.js:54:10)

我尝试跑步

openssl x509 -text -inform DER -in key.pem

它给

unable to load certificate
140735208206812:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
140735208206812:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=X509

由于我的加密文件已经是.pem文件,因此我不确定该错误是什么意思,因此不胜感激。

谢谢

trans by 2020-07-13T09:44:50Z

版本-为什么“建议大多数用户”使用高于v6.2.0的node.js v4.4.5?

几年前,我在开发项目中使用了node.js,该应用暂时处于“滞销状态”-它需要保持在线状态,需要保持安全性,但不需要太多注意。 它当前在node.js v0.10.32上运行,但是我现在想投资到“长期”迁移到长期支持(LTS)版本,以便在可预见的将来更容易维护。

乍一看,node.js主页使其看起来像v4.4.5显然是唯一可用的LTS版本:

enter image description here

但是,如果我单击该LTS时间表链接,它将讲述一个不同的故事。 据我所知,node.js的第6版也将定为LTS发行版,其支持将比第4版晚整整一年。

鉴于:

  • v6.2.0是版本发布
  • v6据说将接受LTS维护,直到2019-04-01
  • 理论上,v6.x中的任何更改都不应破坏向后兼容性

为什么要麻烦升级到v4而不是v6? 好像v4可以为我少买一年的安全补丁,但是没有其他兼容性保证吗?

trans by 2020-07-13T03:54:00Z

node.js-如何在nodejs中的单个文件中提供mysql数据库连接

我需要为模块提供mysql连接。 我有这样的代码。

var express = require('express'),
app = express(),
server = require('http').createServer(app);

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : '127.0.0.1',
    user     : 'root',
    password : '',
    database    : 'chat'
});

connection.connect(function(err) {
    if (err) {
        console.error('error connecting: ' + err.stack);
        return;
    }
});

app.get('/save', function(req,res){
    var post  = {from:'me', to:'you', msg:'hi'};
    var query = connection.query('INSERT INTO messages SET ?', post, function(err, result) {
        if (err) throw err;
    });
});

server.listen(3000);

但是我们如何为所有模块提供一次mysql连接。

trans by 2020-07-13T03:04:47Z

javascript-Intellij Idea警告-使用aysnc / awai的“返回的承诺被忽略”

我在Node.js v7.3的代码中使用Express.js。 在此,我创建了.then(),将请求转发给我的login()

我在.then()内部使用async / await进行异步调用。 问题是IntelliJ给我警告说

从login()返回的承诺将被忽略。

问题是我什至没有从.then()方法返回任何东西。

这是代码-

UserRouter.js

router.post('/login', function (req, res, next) {
    userController.login(req, res); // I get the warning here
});

UserController.js

exports.login = async function (req, res) {
    try {
        const verifiedUser = await someFunction(req.body.access_code);
        let user = await User.findOrCreateUser(verifiedUser);
        res.status(200).send(user);
    }
    catch (err) {
        res.status(400).send({success: false, error: err});
    }
};

如果我仅使用本机Promise编写相同的登录方法,则不会收到此警告。 我在这里理解错了吗?还是IntelliJ错了?

编辑-

感谢@Stephen,我知道异步函数会返回一个promise,但是如果Intellij识别出异步函数未返回任何内容并且不显示该警告会更好,因为当我在.then()函数之后链接一个.then()时 ,则它将undefined对象提供给当时的结果。 这意味着如果我们不从异步函数中显式返回某些内容,则返回undefined吗?

trans by 2020-07-13T00:15:13Z

node.js-为什么npm在安装东西时会闪烁“动词”和“窗台”?

我想了解通过npm安装节点模块时,“动词”和“窗台”这两个词的含义:

⋊> ~/t/quill on develop ◦ npm install                                                                                                                                  15:35:02
⸨      ░░░░░░░░░░░░⸩ ⠙ fetchMetadata: sill mapToRegistry uri https://registry.npmjs.org/big.js

mapToRegistry之前的sill也更改为verb,然后再次返回。 这些是什么意思?

trans by 2020-07-12T23:13:31Z

如何使用Socket.io保护Node.js中的分布式拒绝服务攻击?

我最近一直在学习node.js和socket.io。 我的问题是如何保护服务器免受客户端攻击?

这是我的服务器代码

io.sockets.on('connection', function (socket) { 
//users.push(socket);       
socket.on('message', function (data) {      

    socket.on('disconnect', function () { });           

    socket.on('bcast', function (data) {        
        socket.emit('news', { 'data': data });
        socket.broadcast.emit('news', { 'data': data });     
    });

    socket.on('login', function(data){
      socket.emit('login', {'data': [ socket.id, data ] });
    });
   });
 });

例如,如果客户使用chrome开发人员工具来编写流畅的代码

 for(var i = 0; i<99999999999; i++)
 {
        socket.emit('bcast', {data: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'});
 }

它会杀死服务器。

trans by 2020-07-12T19:40:33Z

javascript-NodeJs child_process工作目录

我试图在一个不同于父目录的目录中执行子目录。

var exec = require('child_process').exec;

exec(
    'pwd',
    {
        cdw: someDirectoryVariable
    },
    function(error, stdout, stderr) {
        // ...
    }
);

我正在做上面的事情(尽管运行“ pwd”当然不是我最后要做的事情)。 不管我为cdw选项提供了什么值,最终都会将父进程的pwd写入stdout。

我想念什么?

(我确实确保通过cwd选项传递的路径确实存在)

trans by 2020-07-12T15:51:25Z

jQuery-Node.js:Ajax与Socket.IO的优缺点

我考虑过摆脱所有客户端Ajax调用(jQuery),而是使用永久套接字连接(Socket.IO)。

因此,我将在客户端和服务器端使用事件侦听器/发射器。

例如 用户在浏览器中触发单击事件,客户端发射器通过套接字连接将事件推送到服务器。 服务器端侦听器对传入事件做出反应,并将“完成”事件推回客户端。 客户端的侦听器通过淡入DIV元素对传入事件做出反应。

这完全有意义吗?优点缺点?

trans by 2020-07-12T11:08:00Z

node.js-错误:大多数中间件(如bodyParser)不再与Express捆绑在一起

我需要创建一个Web服务,并且正在服务器中使用Node.js。 但是当我在本地主机上运行时,出现错误:

错误:大多数中间件(如bodyParser)不再与Express捆绑在一起,必须单独安装。 请参阅[https://github.com/senchalabs/connect#middleware。]

neo4jtest.js

var config = require('./config');   
var bodyParser = require('body-parser'); 

var app = express();

var neo4jurl = process.env.NEO4J_URL ;
neo4jurl = neo4jurl +'/db/data/';

var query = [ 'START me=node:node_auto_index(name={inputusername}) MATCH me<--friend<--friend_of_friend where (friend_of_friend.entitytype={inputentitytype}) RETURN friend_of_friend;' ];
var insertquery = [ 'CREATE (user {entitytype:{inputentitytype}, name : {inputname}}) return user;' ];
var queryforallrelation = [ 'start n = node:node_auto_index(name={inputusername}) match(n)--(x)  return x;'];

// Config


    var env = process.env.NODE_ENV || 'development';
    if ('development' == env) {
    // configure stuff here
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(app.router);
    app.use(express.static(path.join(application_root, "public")));
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
    }

app.get('/api', function (req, res) {
  res.send('REST API is running');
});

app.get('/friendoffriend/:username', function (req, res){
    res.set({'Content-Type': 'text/json'});
    username = req.params.username;
    type = 'user';
    neo4j.connect(neo4jurl, function (err, graph) {

            graph.query(query.join('\n'), {inputusername : username, inputentitytype :type} ,function (err, results) {  
                if (err) {
                    res.send(HTTPStatus.INTERNAL_SERVER_ERROR,'Internal Server Error');
                }
                else {
                    res.send(HTTPStatus.OK,JSON.stringify(results));
                }
            }); 
    });
});

app.get('/insertuser/:username', function (req, res){
    res.set({'Content-Type': 'text/json'});
    username = req.params.username;
    type = 'user';
    neo4j.connect(neo4jurl, function (err, graph) {
            graph.query(insertquery.join('\n'), {inputname : username, inputentitytype :type} ,function (err, results) {    
                if (err) {
                    res.send(HTTPStatus.INTERNAL_SERVER_ERROR,'Internal Server Error');
                }
                else {
                    res.send(HTTPStatus.OK,JSON.stringify(results));
                }
            }); 
    });
});

//Cypher Query with Javascript Callback Example

function neo4jQuery(neo4jurl, query, parameters, giveresults) {
    neo4j.connect(neo4jurl, function (err, graph) {
        graph.query(query.join('\n'), {inputusername : 'andrew'} ,function (err, results) { 
            if (err) {
                giveresults(HTTPStatus.INTERNAL_SERVER_ERROR);
            }
            else {
                giveresults(JSON.stringify(results));
            }
        }); 
    });
}

app.get('/allrelations/:username', function (req, res){
    res.set({'Content-Type': 'text/json'});
    username = req.params.username;
    parameters = {inputusername : username};
    neo4jQuery(neo4jurl, queryforallrelation, parameters, function(results){
        res.send(results);
    });
});



app.listen(1212);

以下是我从控制台收到的错误:

C:\node\NodejsNeo4j1-master>node neo4jtest.js

Error: Most middleware (like bodyParser) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.
    at Function.Object.defineProperty.get (C:\node\NodejsNeo4j1-master\node_modules\express\lib\express.js:89:13)
    at Object.<anonymous> (C:\node\NodejsNeo4j1-master\neo4jtest.js:26:18)
    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:906:3
trans by 2020-07-12T10:54:45Z

javascript-Node.js安装:openssl未安装

我已经安装了libssl-dev和openssl,但是在安装node.js时得到了以下信息:

> ./configure && make && make install                                                                                          
Checking for program g++ or c++          : /usr/bin/g++                                                                                                               
Checking for program cpp                 : /usr/bin/cpp                                                                                                               
Checking for program ar                  : /usr/bin/ar                                                                                                                
Checking for program ranlib              : /usr/bin/ranlib                                                                                                            
Checking for g++                         : ok                                                                                                                         
Checking for program gcc or cc           : /usr/bin/gcc                                                                                                               
Checking for gcc                         : ok                                                                                                                         
Checking for library dl                  : yes                                                                                                                        
Checking for openssl                     : not found                                                                                                                  
Checking for function SSL_library_init   : yes                                                                                                                        
Checking for header openssl/crypto.h     : yes                                                                                                                        
Checking for library rt                  : yes                                                                                                                        
Checking for fdatasync(2) with c++       : yes 

找不到Openssl。 但是节点已成功安装。

为什么找不到openssl? 有人有同样的问题吗?

trans by 2020-07-12T07:09:41Z

javascript-在保存时编译CoffeeScript吗?

无论如何,是否可以在保存时轻松编译CoffeeScript? 我正在使用TextMate或Sublime Text 2。

trans by 2020-07-11T21:07:01Z

javascript-如何将React + NodeJS Express应用程序部署到AWS?

我有一个React + Webpack / Babel + Node / Express应用程序,我想在AWS上部署它。

我需要分别部署React和Node / Express吗? 还是可以同时部署它们?

trans by 2020-07-11T20:14:23Z

node.js-错误:g的nodejs中的getaddrinfo ENOTFOUND

我正在节点上运行Web服务器,其代码如下

var restify = require('restify');

var server = restify.createServer();

var quotes = [
  { author : 'Audrey Hepburn', text : "Nothing is impossible, the word itself says 'I'm possible'!"},
  { author : 'Walt Disney', text : "You may not realize it when it happens, but a kick in the teeth may be the best thing in the world for you"},
  { author : 'Unknown', text : "Even the greatest was once a beginner. Don't be afraid to take that first step."},
  { author : 'Neale Donald Walsch', text : "You are afraid to die, and you're afraid to live. What a way to exist."}
];

server.get('/', function(req, res) {
  res.json(quotes);
});

server.get('/quote/random', function(req, res) {
  var id = Math.floor(Math.random() * quotes.length);
  var q = quotes[id];
  res.json(q);
});

server.get('/quote/:id', function(req, res) {
  if(quotes.length <= req.params.id || req.params.id < 0) {
    res.statusCode = 404;
    return res.send('Error 404: No quote found');
  }

  var q = quotes[req.params.id];
  res.json(q);
});

server.listen(process.env.PORT || 3011);

然后我想在以下代码中进行获取请求

var https = require('http');

/**
 * HOW TO Make an HTTP Call - GET
 */
// options for GET
var optionsget = {
    host : 'http://localhost',
    port : 3010,
    path : '/quote/random', // the rest of the url with parameters if needed
    method : 'GET' // do GET
};

console.info('Options prepared:');
console.info(optionsget);
console.info('Do the GET call');

// do the GET request
var reqGet = https.request(optionsget, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
//  console.log("headers: ", res.headers);


    res.on('data', function(d) {
        console.info('GET result:\n');
        process.stdout.write(d);
        console.info('\n\nCall completed');
    });

});

reqGet.end();
reqGet.on('error', function(e) {
    console.error(e);
});

我只是从节点开始,我什至不知道这是否是正确的方法。我想测试express和restify的性能。我对我编写的服务器代码进行了apache基准测试,发现矛盾的结果是restify更好。所以我想通过调用远程服务来进行更多测试 读写到mongodb。上面的代码是我的起点。我遇到了错误

{ [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' }

我是否至少朝写方向前进? 我要进行哪种测试的正确方法是什么? 为什么我得到的结果重新调整的速度快于表达? 谁能指导我找到在node / express / backbone和mongodb中应用的最佳入门教程?

trans by 2020-07-11T17:00:35Z

流程-在Node.js中的两个不同流程之间进行通信

问题是:

  • 假设我们有两个正在运行的Node.js进程:example1.jsexample2.js

  • example1.js中,有example2.js函数,其结果返回example1.js

  • example1.js内部可以调用example2.js并获取example1.js作为结果吗?

从我对Node.js的了解中,我仅找到一种使用套接字进行通信的解决方案。 但是,这不是理想的,因为它将需要一个进程在端口上侦听。 如果可能,我希望避免这种情况。


编辑:经过一些问题,我想补充一点,在层次结构example1.js不能是example2.js的子进程,而恰恰相反。 同样,如果有帮助,则只能有一个example1.js处理自己的数据,许多example2.js会处理自己的数据+来自第一个进程的数据。

trans by 2020-07-11T14:02:46Z

node.js-Homebrew npm安装:无法symlin

所以我犯了试图摆脱所有sudo依赖关系的错误。 我从网站上以软件包的形式下载了npm并进行了手动/全局安装。 但是似乎我一直都必须使用sudo运行...所以我试图卸载并使用自制软件运行。

现在我什至无法运行node或npm ...我想我必须与brew连接它们,但是我遇到了这个错误:

Could not symlink share/doc/node/gdbinit
Target /usr/local/share/doc/node/gdbinit
already exists. You may want to remove it:
  rm '/usr/local/share/doc/node/gdbinit'

我试着删除它:而且我已经被拒绝了。

我尝试过运行酿造梅子。我尝试卸载,然后使用以下步骤重新安装:

$ brew uninstall npm
$ brew uninstall node
$ npm uninstall npm -g
$ sudo rm -rf /usr/local/lib/node_module

错误:“ brew link”步骤未成功完成

我正在运行优胜美地10.10.5。 我安装了git版本2.6.0。 我的自制软件已更新。 一位酿酒医生给我这个警告:

Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
    node

不知道从这里去哪里。 我试图摆脱对CodeKit的依赖,大干一场。

trans by 2020-07-11T08:19:12Z

javascript-dnode和nowjs有什么区别?

两者如何比较?

trans by 2020-07-11T04:27:11Z

javascript-使用meteor.js有哪些(潜在)缺点?

我刚刚看过meteor.js的截屏视频,就实时更新和数据库同步而言,用它构建Web应用程序看起来多么容易,这让我非常震惊。 但是,我不确定它一旦启用就可以扩展到什么程度。

如果我决定构建和部署用meteor.js编写的Web应用程序,可能会遇到哪些问题(潜在的或实际的)?

trans by 2020-07-11T01:29:16Z

node.js-Node Sequelize中预先加载模型的排序结果

我有一组复杂的关联模型。 这些模型使用联接表进行关联,每个联接表都具有一个称为“ order”的属性。 我需要能够查询父模型“页面”并包括关联的模型,并按“订单”字段对这些关联进行排序。

以下内容对结果的排序顺序没有影响:

db.Page.findAll({
  include: [{
    model: db.Gallery,
    order: ['order', 'DESC'],
    include: [{
      model: db.Artwork,
      order: ['order', 'DESC']
    }]
  }],
})
trans by 2020-07-10T11:49:08Z

无法使用“ npm install”在Node.js中安装任何软件包

我是Node.js的新手,并且正在阅读一些教程。由于某种原因,我无法安装任何新的节点模块。

我在用:Mac OSX 10.7.4,节点v.0.8.6,NPM v.1.1.48。

我运行npm install X,我总是得到一个

npm ERR! fetch failed https://registry.npmjs.org/-/X
npm ERR! Error: 404 Not Found

当我实际进入npmjs注册表时,我可以看到项目页面,但是无论我点击哪个tarball链接,它都是一样的:

{
    "error": "not_found",
    "reason": "document not found"
}

例如,我尝试通过运行npm install fs来安装fs,我得到:

npm http GET https://registry.npmjs.org/fs
npm http 200 https://registry.npmjs.org/fs
npm http GET https://registry.npmjs.org/-/fs-0.0.0.tgz
npm http 404 https://registry.npmjs.org/-/fs-0.0.0.tgz
npm ERR! fetch failed https://registry.npmjs.org/-/fs-0.0.0.tgz
npm ERR! Error: 404 Not Found
npm ERR!     at null.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/fetch.js:47:16)
npm ERR!     at EventEmitter.emit (events.js:115:20)
npm ERR!     at WriteStream.flush (fs.js:1514:12)
npm ERR!     at fs.close (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:92:5)
npm ERR!     at Object.oncomplete (fs.js:297:15)
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Darwin 11.4.0
npm ERR! command "node" "/usr/local/bin/npm" "install" "fs"
npm ERR! cwd /Users/comocomo/Documents/workspace/nodeTest
npm ERR! node -v v0.8.6
npm ERR! npm -v 1.1.48
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/comocomo/Documents/workspace/nodeTest/npm-debug.log
npm ERR! not ok code 0

我尝试了fs,fs-extra,express和可怕,它们都给了我相同的404响应。我一定有什么问题,我敢肯定整个注册表都没有损坏。

我在使用旧的注册表吗? 我应该在配置文件中更改它吗? 老实说,我宁愿不开始手动安装东西,我敢肯定这只是一个小配置问题。

谢谢!

trans by 2020-07-10T11:44:53Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共169页