小编Bon*_*nch的帖子

从fs.readFileSync()到fs.readFile()的Node.js

我试图在Node.js中了解同步与异步,特别是读取html文件.

在请求处理程序中,我正在使用的同步版本,其工作原理如下:

var fs = require("fs");
var filename = "./index.html";
var buf = fs.readFileSync(filename, "utf8");

function start(resp) {
    resp.writeHead(200, {"Content-type":"text/html"});
    resp.write(buf);
    resp.end();
    }

exports.start=start; 
Run Code Online (Sandbox Code Playgroud)
  1. 使用readFile()的版本是什么?
  2. 我理解readFile是异步的,所以理论上我应该等待整个文件在渲染之前被读取,所以我应该引入一个addListener吗?我可能会混淆不同的东西.

编辑:我试图像这样重构代码:

var fs = require("fs");
var filename = "./index.html";
function start (resp) {
    resp.writeHead(200, {"Content-Type":"text/html"});
    fs.readFile(filename, "utf8", function (err, data) {
        if (err) throw err;
        resp.write(data);
        });
    resp.end();
    }
Run Code Online (Sandbox Code Playgroud)

我得到一个空白页面,我想这是因为它应该等待所有数据都被读取,在resp.write(数据)之前,我该如何发出信号?

callback fs readfile node.js

43
推荐指数
2
解决办法
15万
查看次数

Node.js构建sublime-text2

我正在尝试使用sublime-text 2,已通过程序包控制安装了Windows的Nodejs,Nodejs插件,但出现以下错误:

错误:找不到进程“ node.exe”。

文件名,目录名称或卷标签语法不正确。

[在0.1秒内完成,退出代码为1]

我已经将NODE_PATH设置为我的用户环境变量:C:\ Program Files \ nodejs \ node.exe我的系统变量PATH中包含:C:\ Program Files \ nodejs \

我的Nodejs.sublime-settings设置如下:

{
  // save before running commands
  "save_first": true,
  // if present, use this command instead of plain "node"
  // e.g. "/usr/bin/node" or "C:\bin\node.exe"
  "node_command": "C:/Program Files/nodejs/node.exe",
  // Same for NPM command
  "npm_command": false,
  // as 'NODE_PATH' environment variable for node runtime
  "node_path": "C:/Program Files/nodejs/node.exe",

  "expert_mode": false,

  "ouput_to_new_tab": false
}
Run Code Online (Sandbox Code Playgroud)

我的Nodejs.sublime-build的设置如下:

{
  "cmd": ["C:/Program Files/nodejs/node.exe", "$file"],
  "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", …
Run Code Online (Sandbox Code Playgroud)

build node.js sublimetext2

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

Angular ng-include in Jade.

我正在尝试包含一个标题,使用Angular中的ng-include到我的Jade模板中:

doctype html
html(lang="en")
    head
        meta(charset='UTF-8')
        meta(name='fragment', content='!')
        base(href='/')
        title Node Express Angular
        link(rel='stylesheet', href='//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css')
        link(rel='stylesheet', href='/css/syle.css')
    body(ng-app='myApp')
        ng-include(src='\'/partials/header.jade\'')
        div.container
            div.jumbotron.text-center
                h1 Home Page
                p This page is a draft in progress
        script(src='//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.15/angular.min.js')
        script(src='//cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.8/angular-ui-router.min.js')
        script(src='/js/app.js')
Run Code Online (Sandbox Code Playgroud)

header.jade中的文本如下:

nav.navbar.navbar-inverse(role='navigation')
ul.nav.navbar-nav.navbar-header
    li
        a(src='/home', class='navbar-brand') Home
    li
        a(src='/about') About
    li
        a(src='/login') Login
    li
        a(src='/register') Register
Run Code Online (Sandbox Code Playgroud)

我曾经尝试都ng-include(src='\'/partials/header.jade\'')div(ng-include='\'/partials/header.jade\'')

在Chrome开发者控制台中,第一个导致结果,<!--ng-Include: undefined -->第二个导致:<!-- ng-Include: '/partials/header.jade' -->

有线索吗?

express angularjs angularjs-ng-include pug

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

如何将控制台代码更改为1252?

我试图使用Git Bash提供的命令行在Windows 8上使用PostgreSQL,这样我就可以像命令一样运行Unix.使用以下命令访问Postgres时:psql -U postgres我得到:

警告:控制台代码页(850)与Windows代码页(1252)等不同...

在Windows命令工具中,我只需要chcp 1252在访问Postgres之前键入,这样就不会显示警告.unix/git bash中的等效命令是什么?

我尝试做chcp 1252chcp从Git bash但它输出:

sh.exe":chcp:命令未找到

有任何想法吗?

windows postgresql git-bash

3
推荐指数
1
解决办法
3106
查看次数

Sereize实例方法beforeCreate Hooks

我想在Postgres中存储之前对图片进行编码,我在Sequelize中定义了我的模型:

var request = require('request');
module.exports = function (sequelize, DataTypes) {
    var Show = sequelize.define('Show',{
        name: DataTypes.STRING,
        genre: DataTypes.ARRAY(DataTypes.STRING),
        status: DataTypes.STRING,
        poster: DataTypes.TEXT
    }, {
        associate: function (models) {
            Show.hasMany(models.Episode)
            .hasMany(models.User)
        }
    }, {
        instanceMethods: {
            encodePoster : function (poster, done) {
                var url = 'http://thetvdb.com/banners/' + poster;
                request({url: url, encoding: null}, function (err, response, body) {
                    encodedpost = 'data:'+response.headers['content-type']+';base64,' + body.toString('base64');
                    done(err, encodedpost);
                });
            }
        }
    })
    Show.beforeCreate(function (model, done) {
        model.encodePoster(model.poster, function (err, encoded) {
            if (err) return …
Run Code Online (Sandbox Code Playgroud)

postgresql hook node.js sequelize.js

3
推荐指数
1
解决办法
4908
查看次数

返回 JavaScript 中的三元运算符 reduce

我有一个这样的数据结构:

var example = [
    { name: "item1", year: 2013, value: 100 },
    { name: "item1", year: 2012, value:  97 },
    { name: "item3", year: 2013, value:  93 },
    { name: "item3", year: 2012, value:  91 },
    { name: "item2", year: 2012, value:  -6 },
    { name: "item2", year: 2011, value:  -5 },
    { name: "item4", year: 2012, value: -36 },
    { name: "item3", year: 2011, value:  93 },
    { name: "item4", year: 2013, value: -35 },
    { name: "item1", …
Run Code Online (Sandbox Code Playgroud)

javascript arrays reduce indexof

3
推荐指数
1
解决办法
1361
查看次数

AngularJS ng-单击链接到模型

我正在使用Express(即Jade)和Angular构建一个小型rss阅读器.我有一个下拉菜单,其中菜单项由模型中的项目列表填充.无论用户选择什么项目,都会附加一个RSS网址,它应该触发工厂.这是玉的部分:

div.btn-group
    button.btn.btn-info(type='button') {{loadButtonText}}
    button.btn.btn-info.dropdown-toggle(data-toggle='dropdown')
        span.caret
        span.sr-only Toggle Dropdown
    ul.dropdown-menu(role='menu')
        li(ng-repeat='rss in RSSList')
            a(href='#', ng-click="feedSrc='{{rss.url}}';loadFeed($event);") {{rss.Title}}
        input.form-control(type='text', autocomplete='off', placeholder="This is where your feed's url will appear" data-ng-model='feedSrc')
Run Code Online (Sandbox Code Playgroud)

这是我的角度控制器:

var News = angular.module('myApp', []);
News.controller('FeedCtrl', ['$scope','FeedService', function($scope, Feed){
    $scope.loadButtonText = 'Choose News Feed';
    $scope.RSSList = [
        {Title: "CNN", url: 'http://rss.cnn.com/rss/cnn_topstories.rss'},
        {Title: "Reuters", url: 'http://feeds.reuters.com/news/usmarkets'}
    ];
    $scope.loadFeed = function (e) {
        Feed.parseFeed($scope.feedSrc).then(function (res) {
            $scope.loadButtonText=angular.element(e.target).text();
            $scope.feeds = res.data.responseData.feed.entries;
            }); }}]);
News.factory('FeedService', ['$http', function($http){
    return {parseFeed: function (url){
        return $http.jsonp('//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=50&callback=JSON_CALLBACK&q='+encodeURIComponent(url));}}
}]);
Run Code Online (Sandbox Code Playgroud)

似乎ng-click中的feedSrc不捕获rss.url,不能作为参数传递给parseFeed函数.我试图直接将rss.url传递给loadFeed,就像这样ng-click="loadFeed({{rss.url}});" …

angularjs angularjs-ng-click

2
推荐指数
1
解决办法
1288
查看次数

jquery cheerio越过一系列元素

我正在尝试查看2个html表的元素:

<table class="content">
    <tbody>
        <tr>
            <th>head1</th>
            <td>value1</td>
        </tr>
        <tr>
            <th>head2</th>
            <td>value2</td>
        </tr>
    </tbody>
</table>
<table class="content">
    <tbody>
        <tr>
            <th>alpha1</th>
            <td>value4</td>
        </tr>
        <tr>
            <th>alpha2</th>
            <td>value5</td>
        </tr>
        <tr>
            <th>alpha3</th>
            <td>value6</td>
        </tr>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

使用jquery选择器或cheerio,我正在尝试收集这些元素并将它们放在一个JSON对象中,其中文本元素将作为键和值作为值,因此它会像这样

{head1: 'value1',head2: 'value2', alpha1: 'value4', alpha2: 'value5', alpha3: 'value6'}
Run Code Online (Sandbox Code Playgroud)

我正在努力

$('.content).map(function(i, el) {el=$(el).find('>th').text(); return el;}).get().join(',');
Run Code Online (Sandbox Code Playgroud)

但它似乎给了我2个对象,因为2个同名的表.谢谢,谢谢

html jquery web-scraping cheerio

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