小编Pet*_*erT的帖子

app.use和app.get与express.static有什么区别?

注意:结果我的问题不是middlware express.static(),而是app.use()和app.get()之间的区别.这个问题完美地回答了它(比明确的API文档更好!):

express.js中app.use和app.get之间的区别

我理解app.use('/')和app.get('/')之间的区别在于后者仅向该端点提供HTTP GET请求,而前者提供对该端点的所有HTTP请求.

我也理解express.static中间件提供从目录路径到端点的静态页面.

我不遵循的是为什么:

app.get('/', express.static(__dirname + '/public')
Run Code Online (Sandbox Code Playgroud)

仅提供所请求的第一页,而不是所请求页面引用的任何ref =或src = link/script页面.例如,这里有两个摩根跟踪响应一个简单的index.html页面,该页面有一个到文件'style.css'的css链接

1)使用app.use('/')跟踪服务器请求

Server listening on 0.0.0.0:8080
GET / 200 6.258 ms - 444
GET /style.css 304 2.842 ms - -
Run Code Online (Sandbox Code Playgroud)

2)使用app.get('/')跟踪服务器请求

Server listening on 0.0.0.0:8080
GET / 304 5.131 ms - -
GET /style.css 404 2.990 ms - 22
Run Code Online (Sandbox Code Playgroud)

404 ???

即使浏览器向'/'发送了GET请求,app.get('/')也无法为css提供服务,但是app.use('/')成功了.

app.get('/')或express.static我缺少什么细节?

在此先感谢,PT

这是简单,简单的代码:

app.js:

var morgan = require('morgan'),
    express = require('express'),
    app = express(),
    server = require('http').Server(app);
app.use(morgan('dev'));

   // Uncomment .get or .use, but …
Run Code Online (Sandbox Code Playgroud)

node.js express

10
推荐指数
1
解决办法
6465
查看次数

Promise.catch():如何识别操作拒绝和程序性抛出之间的差异

经过大量的谷歌搜索,我找不到一个明确的例子,如何避免编程每个捕获,以确定Promise拒绝错误是程序化还是可操作的.将此与提供回调的节点回调模式(error,params ...)进行比较,其中在error参数中干净地提供操作错误,并且通过throw链处理编程错误.

请告诉我,我正在犯一个noob错误,这是我错过的一个简单的答案.


EDIT Node v10.0.0现在通过添加错误代码解决了这个问题.

感谢RisingStack将此信息发送到我的收件箱:

https://blog.risingstack.com/node-js-10-lts-feature-breakdown

......而且正式而且简洁(一如既往):

https://nodejs.org/api/errors.html#errors_error_code


考虑一个常见的例子:

function logMeIn (email, password, login_token) {
    selectFromDbByEmailAndCheckPwAndReturnId (email, password)
    .then(id => { return updateUserIdLoginToken(id, login_token); })
    .catch(error => {
        // all rejects and throws end up here
        console.log(error);
    })
})

function selectFromDbByEmailAndCheckPwAndReturnId (email, password) {
   return new Promise((resolve, reject) => {
      db.sql.query( /* params */, (error, results) => {
          blarg = 1; // <-- reference error, programmatic
          // do your SELECT * FROM Users where email=? ... etc.
          if …
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise es6-promise

5
推荐指数
1
解决办法
105
查看次数

为什么我需要在 Promise .then() 中闭包?

我一直在学习 Node (7.4.0) 中的 ES6 Promise,因为我想应用它们来处理串行通信。我做出了一个承诺,它是许多较小承诺的集合,允许我使用发送者、事件监听器和超时来序列化与设备的通信。但是,我不太理解 .then() 链接,因为我需要添加一些额外的闭包,这些闭包看起来与我在许多示例中看​​到的不同,这让我相信我误解了一些基本的东西。考虑这个函数(我删除了所有的prototype/this.code以使其更小):

function sendAck(command, ack, timeout) {
  return new Promise((resolve, reject) => {
    if (gReady === undefined) reject('not ready');
    // each of these three functions returns a promise
    let sendPromise = createSend(command);
    let ackPromise = createAck(ack);
    let timeoutPromise = createTimeout(timeout);
    // p1 = we hear a response, or timeout waiting for one
    let p1 = Promise.race([ackPromise, timeoutPromise]);
    // both p1 -and- send function need to resolve
    let p2 = Promise.all([p1, sendPromise]);
    p2.then(values => resolve(values)).catch(err …
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise

4
推荐指数
1
解决办法
3685
查看次数

标签 统计

node.js ×3

javascript ×2

promise ×2

es6-promise ×1

express ×1